MEDIUM: servers: Store the connection in the SI until we have a mux.
When we create a connection, if we have to defer the conn_stream and the mux creation until we can decide it (ie until the SSL handshake is done, and the ALPN is decided), store the connection in the stream_interface, so that we're sure we can destroy it if needed.
This commit is contained in:
parent
25607afa0a
commit
ee23b2a1e3
@ -161,6 +161,7 @@ static inline enum obj_type *si_detach_endpoint(struct stream_interface *si)
|
||||
*/
|
||||
static inline void si_release_endpoint(struct stream_interface *si)
|
||||
{
|
||||
struct connection *conn;
|
||||
struct conn_stream *cs;
|
||||
struct appctx *appctx;
|
||||
|
||||
@ -177,7 +178,8 @@ static inline void si_release_endpoint(struct stream_interface *si)
|
||||
if (appctx->applet->release && si->state < SI_ST_DIS)
|
||||
appctx->applet->release(appctx);
|
||||
appctx_free(appctx); /* we share the connection pool */
|
||||
}
|
||||
} else if ((conn = objt_conn(si->end)))
|
||||
conn_free(conn);
|
||||
si_detach_endpoint(si);
|
||||
}
|
||||
|
||||
|
@ -1279,9 +1279,10 @@ int connect_server(struct stream *s)
|
||||
/* Store the connection into the stream interface,
|
||||
* while we still don't have a mux, so that if the
|
||||
* stream is destroyed before the connection is
|
||||
* established, and a mux is set, we don't attempt
|
||||
* to access the stream
|
||||
* established, we have a chance to destroy it even
|
||||
* if it is no longer referenced in the session.
|
||||
*/
|
||||
s->si[1].end = &srv_conn->obj_type;
|
||||
conn_set_xprt_done_cb(srv_conn, conn_complete_server);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user