diff --git a/include/haproxy/applet-t.h b/include/haproxy/applet-t.h index e7823e136..2784650d9 100644 --- a/include/haproxy/applet-t.h +++ b/include/haproxy/applet-t.h @@ -39,6 +39,7 @@ struct appctx; struct proxy; struct conn_stream; struct cs_endpoint; +struct session; /* Applet descriptor */ struct applet { @@ -61,6 +62,7 @@ struct appctx { unsigned int st1; /* prompt/payload (bitwise OR of APPCTX_CLI_ST1_*) for stats, session error for peers */ struct buffer *chunk; /* used to store unfinished commands */ struct applet *applet; /* applet this context refers to */ + struct session *sess; /* session for frontend applets (NULL for backend applets) */ struct cs_endpoint *endp; struct act_rule *rule; /* rule associated with the applet. */ int (*io_handler)(struct appctx *appctx); /* used within the cli_io_handler when st0 = CLI_ST_CALLBACK */ diff --git a/include/haproxy/applet.h b/include/haproxy/applet.h index 185c1c19c..2ee368b83 100644 --- a/include/haproxy/applet.h +++ b/include/haproxy/applet.h @@ -29,6 +29,7 @@ #include #include #include +#include #include extern unsigned int nb_applets; @@ -47,7 +48,8 @@ static inline void __appctx_free(struct appctx *appctx) task_destroy(appctx->t); if (LIST_INLIST(&appctx->buffer_wait.list)) LIST_DEL_INIT(&appctx->buffer_wait.list); - + if (appctx->sess) + session_free(appctx->sess); BUG_ON(appctx->endp && !(appctx->endp->flags & CS_EP_ORPHAN)); cs_endpoint_free(appctx->endp); pool_free(pool_head_appctx, appctx); diff --git a/src/applet.c b/src/applet.c index 9e15c7eb7..b7711b1bd 100644 --- a/src/applet.c +++ b/src/applet.c @@ -42,7 +42,7 @@ struct appctx *appctx_new(struct applet *applet, struct cs_endpoint *endp) LIST_INIT(&appctx->wait_entry); appctx->obj_type = OBJ_TYPE_APPCTX; appctx->applet = applet; - + appctx->sess = NULL; if (!endp) { endp = cs_endpoint_new(); if (!endp)