]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: mux-h1: Always release H1C if a shutdown for writes was reported
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 28 Jun 2019 15:41:42 +0000 (17:41 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 28 Jun 2019 15:58:15 +0000 (17:58 +0200)
We must take care of this when the stream is detached from the
connection. Otherwise, on the server side, the connexion is inserted in the list
of idle connections of the session. But when reused, because the shutdown for
writes was already catched, nothing is sent to the server and the session is
blocked with a freezed connection.

This patch must be backported to 2.0 and 1.9. It is related to the issue #136
reported on Github.

src/mux_h1.c

index 3d2bd8b87750ea83638ea29da75f5f8ec8cd8756..e497e6f68d6ca391b3bcca1aa256e33783d66a9b 100644 (file)
@@ -2192,9 +2192,9 @@ static void h1_detach(struct conn_stream *cs)
                }
        }
 
-       /* We don't want to close right now unless the connection is in error */
-       if ((h1c->flags & (H1C_F_CS_ERROR|H1C_F_CS_SHUTDOWN|H1C_F_UPG_H2C)) ||
-           (h1c->conn->flags & CO_FL_ERROR) || !h1c->conn->owner)
+       /* We don't want to close right now unless the connection is in error or shut down for writes */
+       if ((h1c->flags & (H1C_F_CS_ERROR|H1C_F_CS_SHUTW_NOW|H1C_F_CS_SHUTDOWN|H1C_F_UPG_H2C)) ||
+           (h1c->conn->flags & (CO_FL_ERROR|CO_FL_SOCK_WR_SH)) || !h1c->conn->owner)
                h1_release(h1c);
        else {
                tasklet_wakeup(h1c->wait_event.tasklet);