From 8fe516f08affb55f5fed68896d93fd40e6873f34 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 9 Nov 2018 16:21:43 +0100 Subject: [PATCH] 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. --- include/proto/stream_interface.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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; -- 2.47.2