]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: stream-int: make si_chk_rcv() check that SI_FL_WAIT_ROOM is cleared
authorWilly Tarreau <w@1wt.eu>
Fri, 9 Nov 2018 15:21:43 +0000 (16:21 +0100)
committerWilly Tarreau <w@1wt.eu>
Sun, 11 Nov 2018 09:18:37 +0000 (10:18 +0100)
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

index 2d3fe565188187284aa4a1a26a147bff0d042105..54d9810f10551763639d2ef0bae43b6f8ff5f047 100644 (file)
@@ -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;