From: Olivier Houchard Date: Sun, 22 Mar 2020 22:25:51 +0000 (+0100) Subject: MINOR: muxes: Note that we can't usee a connection when added to the srv idle. X-Git-Tag: v2.2-dev5~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=199d4fade4301774e5bcde77a162ed92e134fc85;p=thirdparty%2Fhaproxy.git MINOR: muxes: Note that we can't usee a connection when added to the srv idle. In the various muxes, add a comment documenting that once srv_add_to_idle_list() got called, any thread may pick that conenction up, so it is unsafe to access the mux context/the connection, the only thing we can do is returning. --- diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 993e02cca4..b7afde1b87 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -3558,6 +3558,10 @@ static void fcgi_detach(struct conn_stream *cs) TRACE_DEVEL("outgoing connection killed", FCGI_EV_STRM_END|FCGI_EV_FCONN_ERR); return; } + /* At this point, the connection has been added to the + * server idle list, so another thread may already have + * hijacked it, so we can't do anything with it. + */ TRACE_DEVEL("reusable idle connection", FCGI_EV_STRM_END, fconn->conn); return; } diff --git a/src/mux_h1.c b/src/mux_h1.c index fee645b191..27b1cb674b 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -2473,6 +2473,10 @@ static void h1_detach(struct conn_stream *cs) TRACE_DEVEL("outgoing connection killed", H1_EV_STRM_END|H1_EV_H1C_END); goto end; } + /* At this point, the connection has been added to the + * server idle list, so another thread may already have + * hijacked it, so we can't do anything with it. + */ return; } } diff --git a/src/mux_h2.c b/src/mux_h2.c index d10c525c90..6b1c0d1184 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -3959,6 +3959,10 @@ static void h2_detach(struct conn_stream *cs) TRACE_DEVEL("leaving on error after killing outgoing connection", H2_EV_STRM_END|H2_EV_H2C_ERR); return; } + /* At this point, the connection has been added to the + * server idle list, so another thread may already have + * hijacked it, so we can't do anything with it. + */ TRACE_DEVEL("reusable idle connection", H2_EV_STRM_END); return;