From 2b4e8b7b2d62e2897e124d6da1530bb0602e426c Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 16 Dec 2021 14:33:52 +0100 Subject: [PATCH] MINOR: connection: Add a function to detach a conn-stream from the connection cs_detach() function is added to detach a conn-stream from the underlying connection. This part will evovle to handle applets too. Concretely, cs_destroy() is split to detach the conn-stream from its endpoint, via cs_detach(), and then, the conn-stream is released, via cs_free(). --- include/haproxy/connection.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/include/haproxy/connection.h b/include/haproxy/connection.h index e0af4c3aa..169cd581a 100644 --- a/include/haproxy/connection.h +++ b/include/haproxy/connection.h @@ -336,6 +336,7 @@ static inline void cs_init(struct conn_stream *cs, struct connection *conn) cs->obj_type = OBJ_TYPE_CS; cs->flags = CS_FL_NONE; cs->conn = conn; + cs->ctx = conn; } /* returns 0 if the connection is valid and is a frontend connection, otherwise @@ -390,8 +391,12 @@ static inline void conn_force_unsubscribe(struct connection *conn) conn->subs = NULL; } -/* Release a conn_stream */ -static inline void cs_destroy(struct conn_stream *cs) +/* Detach the conn_stream from the connection, if any. If a mux owns the + * connection ->detach() callback is called. Otherwise, it means the conn-stream + * owns the connection. In this case the connection is closed and released. The + * conn-stream is not released. + */ +static inline void cs_detach(struct conn_stream *cs) { if (cs_conn(cs)) { if (cs->conn->mux) @@ -409,6 +414,13 @@ static inline void cs_destroy(struct conn_stream *cs) conn_free(conn); } } + cs_init(cs, NULL); +} + +/* Release a conn_stream */ +static inline void cs_destroy(struct conn_stream *cs) +{ + cs_detach(cs); cs_free(cs); }