From: Willy Tarreau Date: Thu, 6 Jun 2019 12:32:49 +0000 (+0200) Subject: MEDIUM: stream: only loop on flags relevant to the analysers X-Git-Tag: v2.0-dev6~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3c5c066d66d213afffaead7e82f3233d9debf66d;p=thirdparty%2Fhaproxy.git MEDIUM: stream: only loop on flags relevant to the analysers In process_stream() we detect a number of conditions to decide to loop back to the analysers. Some of them are excessive in that they perform a strict comparison instead of filtering on the flags relevant to the analysers as is done at other places, resulting in excess wakeups. One of the effect is that after a successful WRITE_PARTIAL, a second send is not possible, resulting in the loss of WRITE_PARTIAL, causing another wakeup! Let's apply the same mask and verify the flags correctly. --- diff --git a/src/stream.c b/src/stream.c index f92a0085fa..860f2fdd2c 100644 --- a/src/stream.c +++ b/src/stream.c @@ -2629,7 +2629,7 @@ struct task *process_stream(struct task *t, void *context, unsigned short state) (si_b->flags & SI_FL_ERR && si_b->state != SI_ST_CLO)) goto resync_stream_interface; - if (req->flags != rqf_last) + if ((req->flags & ~rqf_last) & CF_MASK_ANALYSER) goto resync_request; if ((res->flags ^ rpf_last) & CF_MASK_STATIC)