From e758b5c703d9d18cf3cec83aec9d6cb36bead157 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 27 Feb 2023 16:21:00 +0100 Subject: [PATCH] MEDIUM: stream: Eventually handle stream timeouts when exiting process_stream() When we exit from process_stream(), if the task is expired, we try to handle the stream timeouts and we resync the stream-connectors. This avoids a useless immediate wakeup. It is not really an issue, but it is a small improvement in edge cases. --- src/stream.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/stream.c b/src/stream.c index a8a8816ae..b2428e4a7 100644 --- a/src/stream.c +++ b/src/stream.c @@ -2539,6 +2539,13 @@ struct task *process_stream(struct task *t, void *context, unsigned int state) t->expire = tick_first(t->expire, s->conn_exp); + if (unlikely(tick_is_expired(t->expire, now_ms))) { + /* Some events prevented the timeouts to be handled but nothing evolved. + So do it now and resyunc the stconns + */ + stream_handle_timeouts(s); + goto resync_stconns; + } s->pending_events &= ~(TASK_WOKEN_TIMER | TASK_WOKEN_RES); stream_release_buffers(s);