From 1cc08a33e17ca9c72204af84ecaa0c87e6d1f066 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 18 Aug 2022 18:13:34 +0200 Subject: [PATCH] MINOR: applet: add a function to reset the svcctx of an applet The CLI needs to reset the svcctx between commands, and there was nothing done to handle this. Let's add appctx_reset_svcctx() to do that, it's the closing equivalent of appctx_reserve_svcctx(). This will have to be backported to 2.6 as it will be used by a subsequent patch to fix a bug. --- include/haproxy/applet.h | 1 + src/applet.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/include/haproxy/applet.h b/include/haproxy/applet.h index 752a1a2b2..6eb792670 100644 --- a/include/haproxy/applet.h +++ b/include/haproxy/applet.h @@ -40,6 +40,7 @@ extern struct pool_head *pool_head_appctx; struct task *task_run_applet(struct task *t, void *context, unsigned int state); int appctx_buf_available(void *arg); void *applet_reserve_svcctx(struct appctx *appctx, size_t size); +void applet_reset_svcctx(struct appctx *appctx); void appctx_shut(struct appctx *appctx); struct appctx *appctx_new_on(struct applet *applet, struct sedesc *sedesc, int thr); diff --git a/src/applet.c b/src/applet.c index 41ad2fc3d..c9d0c55bf 100644 --- a/src/applet.c +++ b/src/applet.c @@ -142,6 +142,15 @@ void *applet_reserve_svcctx(struct appctx *appctx, size_t size) return appctx->svcctx; } +/* This is used to reset an svcctx and the svc.storage without releasing the + * appctx. In fact this is only used by the CLI applet between commands. + */ +void applet_reset_svcctx(struct appctx *appctx) +{ + memset(&appctx->svc.storage, 0, APPLET_MAX_SVCCTX); + appctx->svcctx = NULL; +} + /* call the applet's release() function if any, and marks the sedesc as shut. * Needs to be called upon close(). */