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 5be833d..fa0959c 100644
--- a/include/haproxy/conn_stream.h
+++ b/include/haproxy/conn_stream.h
@@ -39,6 +39,7 @@
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 0c7bf9b..f0b06c6 100644
--- a/src/conn_stream.c
+++ b/src/conn_stream.c
@@ -133,11 +133,27 @@
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);
}