]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: check: fix leak on agent-check purge
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 10 Aug 2021 14:23:49 +0000 (16:23 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 11 Aug 2021 12:40:21 +0000 (14:40 +0200)
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

index 6225cc8feb6f664e4040150f80cbf82156b4274b..4a4e4c77097c8e56246bb5af9339d195126ca75c 100644 (file)
@@ -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;