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.
This commit is contained in:
Willy Tarreau 2019-06-06 14:32:49 +02:00
parent 829bd4710f
commit 3c5c066d66

View File

@ -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)