From 26cb8342ad0084e61d81ecaad948ce85843a29b4 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Tue, 10 Aug 2021 16:23:49 +0200 Subject: [PATCH] BUG/MEDIUM: check: fix leak on agent-check purge There is currently a leak on agent-check for dynamic servers. When deleted, the check rules and vars are not liberated. This leak grows each time a dynamic server with agent-check is deleted. Replace the manual purge code by a free_check invocation which centralizes all the details on check cleaning. There is no leak for health check because in this case the proxy is the owner of the check vars and rules. This should not be backported, unless dynamic server checks are backported. --- src/check.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/check.c b/src/check.c index 6225cc8fe..4a4e4c770 100644 --- a/src/check.c +++ b/src/check.c @@ -1245,16 +1245,11 @@ struct task *process_chk_conn(struct task *t, void *context, unsigned int state) * after this point. */ if (unlikely(check->state & CHK_ST_PURGE)) { - /* buf_wait */ - LIST_DELETE(&check->buf_wait.list); - /* tasklet */ - pool_free(pool_head_tasklet, check->wait_list.tasklet); - /* task */ - task_destroy(check->task); - t = NULL; - + free_check(check); if (check->server) free_server(check->server); + + t = NULL; } return t;