You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

35 lines
1.5 KiB

commit 9fa93f6220a374f724491fd781d44d31f307671f
Author: Christopher Faulet <cfaulet@haproxy.com>
Date: Fri Jun 28 17:41:42 2019 +0200
BUG/MEDIUM: mux-h1: Always release H1C if a shutdown for writes was reported
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.
(cherry picked from commit 3ac0f43020e1cd77198020201e4e482a1c2ef8ac)
Signed-off-by: Willy Tarreau <w@1wt.eu>
diff --git a/src/mux_h1.c b/src/mux_h1.c
index 3d2bd8b8..e497e6f6 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -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);