From: Willy Tarreau Date: Fri, 9 Nov 2018 15:21:43 +0000 (+0100) Subject: MEDIUM: stream-int: make si_chk_rcv() check that SI_FL_WAIT_ROOM is cleared X-Git-Tag: v1.9-dev6~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fe516f08affb55f5fed68896d93fd40e6873f34;p=thirdparty%2Fhaproxy.git MEDIUM: stream-int: make si_chk_rcv() check that SI_FL_WAIT_ROOM is cleared After careful inspection, it now seems OK to call si_chk_rcv() only when SI_FL_WAIT_ROOM is cleared and SI_FL_WANT_PUT is set, since all identified call places have already taken care of this. --- diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index 2d3fe56518..54d9810f10 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -384,12 +384,13 @@ static inline void si_update(struct stream_interface *si) } /* This is to be used after making some room available in a channel. It will - * clear SI_FL_WAIT_ROOM, then if SI_FL_WANT_PUT is set, will calls ->chk_rcv() - * to enable receipt of new data. + * return without doing anything if {SI_FL_WANT_PUT,SI_FL_WAIT_ROOM} != {1,0}. + * It will then call ->chk_rcv() to enable receipt of new data. */ static inline void si_chk_rcv(struct stream_interface *si) { - si->flags &= ~SI_FL_WAIT_ROOM; + if (si->flags & SI_FL_WAIT_ROOM) + return; if (!(si->flags & SI_FL_WANT_PUT)) return;