From: Willy Tarreau Date: Wed, 5 Aug 2015 09:08:30 +0000 (+0200) Subject: MINOR: stream-int: make si_idle_conn() only accept valid connections X-Git-Tag: v1.6-dev4~114 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4320eaac62e8f1db63766a05f5dfd715dcb75479;p=thirdparty%2Fhaproxy.git MINOR: stream-int: make si_idle_conn() only accept valid connections This function is now dedicated to idle connections only, which means that it must not be used without any endpoint nor anything not a connection. The connection remains attached to the stream interface. --- diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index 09c2a4e5e1..8c7a950766 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -167,17 +167,15 @@ static inline void si_release_endpoint(struct stream_interface *si) si_detach_endpoint(si); } -/* Turn a possibly existing connection endpoint of stream interface to - * idle mode, which means that the connection will be polled for incoming events - * and might be killed by the underlying I/O handler. If is not null, the - * connection will also be added at the head of this list. +/* Turn an existing connection endpoint of stream interface to idle mode, + * which means that the connection will be polled for incoming events and might + * be killed by the underlying I/O handler. If is not null, the + * connection will also be added at the head of this list. This connection + * remains assigned to the stream interface it is currently attached to. */ static inline void si_idle_conn(struct stream_interface *si, struct list *pool) { - struct connection *conn = objt_conn(si->end); - - if (!conn) - return; + struct connection *conn = __objt_conn(si->end); if (pool) LIST_ADD(pool, &conn->list); diff --git a/src/proto_http.c b/src/proto_http.c index 352dd75b08..d1acf30a9a 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -5186,11 +5186,10 @@ void http_end_txn_clean_session(struct stream *s) channel_auto_close(&s->res); /* we're in keep-alive with an idle connection, monitor it */ - srv = NULL; - if (srv_conn) + if (srv_conn) { srv = objt_server(srv_conn->target); - - si_idle_conn(&s->si[1], srv ? &srv->priv_conns : NULL); + si_idle_conn(&s->si[1], srv ? &srv->priv_conns : NULL); + } s->req.analysers = strm_li(s)->analysers; s->res.analysers = 0;