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.
(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)