From 1ec9bb5b62d915b66d2f2b4cffbd28ae16b22311 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 6 Jun 2019 14:45:26 +0200 Subject: [PATCH] MEDIUM: stream: don't abusively loop back on changes on CF_SHUT*_NOW These flags are not used by analysers, only by the shut* functions, and they were covered by CF_MASK_STATIC only because in the past the shut functions were in the middle of the analysers. But here they are causing excess loop backs which provide no value and increase processing cost. Ideally the CF_MASK_STATIC bitfield should be revisited, but doing this alone is enough to reduce by 30% the number of calls to si_sync_send(). --- src/stream.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stream.c b/src/stream.c index 860f2fdd2c..e536ee2ef8 100644 --- a/src/stream.c +++ b/src/stream.c @@ -2144,7 +2144,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) req->flags &= ~CF_WAKE_ONCE; rqf_last = req->flags; - if ((req->flags ^ flags) & CF_MASK_STATIC) + if ((req->flags ^ flags) & (CF_SHUTR|CF_SHUTW)) goto resync_request; } @@ -2213,7 +2213,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) res->flags &= ~CF_WAKE_ONCE; rpf_last = res->flags; - if ((res->flags ^ flags) & CF_MASK_STATIC) + if ((res->flags ^ flags) & (CF_SHUTR|CF_SHUTW)) goto resync_response; } @@ -2500,7 +2500,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) goto resync_stream_interface; /* otherwise we want to check if we need to resync the req buffer or not */ - if ((req->flags ^ rqf_last) & CF_MASK_STATIC) + if ((req->flags ^ rqf_last) & (CF_SHUTR|CF_SHUTW)) goto resync_request; /* perform output updates to the response buffer */ -- 2.47.3