si_detach_endpoint(si);
}
-/* Turn a possibly existing connection endpoint of stream interface <si> 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 <pool> is not null, the
- * connection will also be added at the head of this list.
+/* Turn an existing connection endpoint of stream interface <si> 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 <pool> 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);
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;