MAJOR: conn-stream: Share endpoint struct between the CS and the mux/applet
The conn-stream endpoint is now shared between the conn-stream and the
applet or the multiplexer. If the mux or the applet is created first, it is
responsible to also create the endpoint and share it with the conn-stream.
If the conn-stream is created first, it is the opposite.
When the endpoint is only owned by an applet or a mux, it is called an
orphan endpoint (there is no conn-stream). When it is only owned by a
conn-stream, it is called a detached endpoint (there is no mux/applet).
The last entity that owns an endpoint is responsible to release it. When a
mux or an applet is detached from a conn-stream, the conn-stream
relinquishes the endpoint to recreate a new one. This way, the endpoint
state is never lost for the mux or the applet.
diff --git a/src/hlua.c b/src/hlua.c
index 705c15c..af26aae 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -2918,7 +2918,6 @@
struct hlua_socket *socket;
struct appctx *appctx;
struct session *sess;
- struct cs_endpoint *endp;
struct conn_stream *cs;
struct stream *s;
@@ -2946,7 +2945,7 @@
lua_setmetatable(L, -2);
/* Create the applet context */
- appctx = appctx_new(&update_applet);
+ appctx = appctx_new(&update_applet, NULL);
if (!appctx) {
hlua_pusherror(L, "socket: out of memory");
goto out_fail_conf;
@@ -2964,17 +2963,9 @@
goto out_fail_appctx;
}
- endp = cs_endpoint_new();
- if (!endp)
- goto out_fail_sess;
- endp->target = appctx;
- endp->ctx = appctx;
- endp->flags |= CS_EP_T_APPLET;
-
- cs = cs_new_from_applet(endp, sess, &BUF_NULL);
+ cs = cs_new_from_applet(appctx->endp, sess, &BUF_NULL);
if (!cs) {
hlua_pusherror(L, "socket: out of memory");
- cs_endpoint_free(endp);
goto out_fail_sess;
}