BUG/MEDIUM: checks: make sure to always apply offsets to now_ms in expiration

Now_ms can be zero nowadays, so it's not suitable for direct assignment to
t->expire, as there's a risk that the timer never wakes up once assigned
(TICK_ETERNITY). Let's use tick_add(now_ms, 0) for an immediate wakeup
instead. The impact here might be health checks suddenly stopping.

This should be backported where it applies.
This commit is contained in:
Willy Tarreau 2024-11-15 15:34:46 +01:00
parent 555994c968
commit 2f287f14f3
2 changed files with 2 additions and 2 deletions

View File

@ -1279,7 +1279,7 @@ struct task *process_chk_conn(struct task *t, void *context, unsigned int state)
* was erased during the bounce.
*/
if (!tick_isset(t->expire)) {
t->expire = now_ms;
t->expire = tick_add(now_ms, 0);
expired = 0;
}
}

View File

@ -162,7 +162,7 @@ static void pid_list_expire(pid_t pid, int status)
HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock);
list_for_each_entry(elem, &pid_list, list) {
if (elem->pid == pid) {
elem->t->expire = now_ms;
elem->t->expire = tick_add(now_ms, 0);
elem->status = status;
elem->exited = 1;
task_wakeup(elem->t, TASK_WOKEN_IO);