From 1e1e780b7916a29fda9d65938591c92fbd6bf481 Mon Sep 17 00:00:00 2001 From: Frederic Lecaille Date: Tue, 7 Jul 2026 16:00:47 +0200 Subject: [PATCH] BUG/MINOR: haload: fix spurious task wakeup in hld_strm_task() When a stream is freed, hld_strm_task() was unconditionally re-queuing the user task, even when no streams were left or when no update was needed. This caused spurious task wakeups, which could incorrectly inflate connection and request rate counters to come for the -R option implementation. Only queue the user task if there are remaining streams to process, and properly update the expiration time. No need to backport. haload arrived with this current version. --- src/haload.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/haload.c b/src/haload.c index 470f9a3b9..17cefa961 100644 --- a/src/haload.c +++ b/src/haload.c @@ -1265,6 +1265,17 @@ struct task *hld_strm_task(struct task *t, void *context, unsigned int state) hldstream_free(&hs); t = NULL; + if (LIST_ISEMPTY(&usr->strms)) + usr->task->expire = TICK_ETERNITY; + else { + /* Update the user task expiration from the first stream which + * is also the stream with the oldest expiration time. + */ + first_hs = LIST_ELEM(usr->strms.n, struct hldstream *, list); + hs->usr->task->expire = first_hs->expire; + task_queue(hs->usr->task); + } + goto leave; err: TRACE_DEVEL("leaving on error", HLD_STRM_EV_TASK, hs); -- 2.47.3