mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-02 03:30:59 +02:00
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