From c36de9dc93b229b9817459ca8bc62750e0e22262 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Thu, 6 Jan 2022 08:44:58 +0100 Subject: [PATCH] MINOR: conn-stream: Release a CS when both app and endp are detached cs_detach_app() function is added to detach an app from a conn-stream. And now, both cs_detach_app() and cs_detach_endp() release the conn-stream when both the app and the endpoint are detached. --- include/haproxy/conn_stream.h | 1 + src/conn_stream.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/haproxy/conn_stream.h b/include/haproxy/conn_stream.h index 5be833dbc..fa0959c6d 100644 --- a/include/haproxy/conn_stream.h +++ b/include/haproxy/conn_stream.h @@ -39,6 +39,7 @@ void cs_free(struct conn_stream *cs); void cs_attach_endp(struct conn_stream *cs, enum obj_type *endp, void *ctx); int cs_attach_app(struct conn_stream *cs, enum obj_type *app); void cs_detach_endp(struct conn_stream *cs); +void cs_detach_app(struct conn_stream *cs); /* * Initializes all required fields for a new conn_strema. diff --git a/src/conn_stream.c b/src/conn_stream.c index 0c7bf9b42..f0b06c65b 100644 --- a/src/conn_stream.c +++ b/src/conn_stream.c @@ -133,11 +133,27 @@ void cs_detach_endp(struct conn_stream *cs) appctx_free(appctx); } - /* Rest CS */ + /* FIXME: Rest CS for now but must be reviewed. CS flags are only + * connection related for now but this will evolved + */ cs->flags = CS_FL_NONE; cs->end = NULL; cs->ctx = NULL; if (cs->si) cs->si->ops = &si_embedded_ops; cs->data_cb = NULL; + + if (cs->app == NULL) + cs_free(cs); +} + +void cs_detach_app(struct conn_stream *cs) +{ + si_free(cs->si); + cs->app = NULL; + cs->si = NULL; + cs->data_cb = NULL; + + if (cs->end == NULL) + cs_free(cs); }