From: Christopher Faulet Date: Thu, 6 Jan 2022 07:44:58 +0000 (+0100) Subject: MINOR: conn-stream: Release a CS when both app and endp are detached X-Git-Tag: v2.6-dev2~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c36de9dc93b229b9817459ca8bc62750e0e22262;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/include/haproxy/conn_stream.h b/include/haproxy/conn_stream.h index 5be833dbca..fa0959c6d8 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 0c7bf9b423..f0b06c65bc 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); }