]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: tasks: Make sure we don't schedule a task already running
authorOlivier Houchard <ohouchard@haproxy.com>
Thu, 9 Apr 2026 13:33:39 +0000 (15:33 +0200)
committerOlivier Houchard <cognet@ci0.org>
Wed, 22 Apr 2026 14:05:23 +0000 (16:05 +0200)
commit7e1cc0fcdbcace75a957a69fc8a4d991f7b30fdb
tree97a5cd50fce1ed5452297337ab9169d30e0de6f0
parent8f7ee0a59ffb9bb637a6d4d669ff29cf04618940
BUG/MEDIUM: tasks: Make sure we don't schedule a task already running

In task_schedule(), before attempting to set the new task expiration
date, make sure it is not running by trying to set the TASK_RUNNING
flag, and waiting if it is already there. Having the flag set will
ensure that the task won't be running while we're modifying it.
There is a very rare race condition, where the expire would be set by
task_schedule(), then the running task might set it to something else,
and if it sets it to TICK_ETERNITY before task_schedule() calls
__task_queue(), then we will hit a BUG_ON() there.
This is very hard to reproduce, but has been reported a few times,
included in Github issue #3327, which should now be fixed.

This should be backported as far back as 2.8.

WIP: Make sure the task is not running before changing expire
include/haproxy/task.h