BUG/MINOR: proxy: wake up all threads when sending the hard-stop signal

The hard-stop event didn't wake threads up. In the past it wasn't an issue
as the poll timeout was limited to 1 second, but since commit 4f59d3861
("MINOR: time: increase the minimum wakeup interval to 60s") it has become
a problem because old processes can remain live for up to one minute after
the hard-stop-after delay. Let's just wake them up.

This may be backported to older releases, though before 2.4 the extra
delay was only one second.
This commit is contained in:
Willy Tarreau 2021-02-24 11:13:59 +01:00
parent 3f5dd2945c
commit 0d03825b93

View File

@ -1612,11 +1612,15 @@ struct task *hard_stop(struct task *t, void *context, unsigned short state)
{ {
struct proxy *p; struct proxy *p;
struct stream *s; struct stream *s;
int thr;
if (killed) { if (killed) {
ha_warning("Some tasks resisted to hard-stop, exiting now.\n"); ha_warning("Some tasks resisted to hard-stop, exiting now.\n");
send_log(NULL, LOG_WARNING, "Some tasks resisted to hard-stop, exiting now.\n"); send_log(NULL, LOG_WARNING, "Some tasks resisted to hard-stop, exiting now.\n");
killed = 2; killed = 2;
for (thr = 0; thr < global.nbthread; thr++)
if (((all_threads_mask & ~tid_bit) >> thr) & 1)
wake_thread(thr);
t->expire = TICK_ETERNITY; t->expire = TICK_ETERNITY;
return t; return t;
} }