diff --git a/include/haproxy/pool-t.h b/include/haproxy/pool-t.h index 1801f135b..524c871b8 100644 --- a/include/haproxy/pool-t.h +++ b/include/haproxy/pool-t.h @@ -28,6 +28,7 @@ #define MEM_F_SHARED 0x1 #define MEM_F_EXACT 0x2 #define MEM_F_UAF 0x4 +#define MEM_F_STATREG 0x8 /* static registration: do not free it! */ /* A special pointer for the pool's free_list that indicates someone is * currently manipulating it. Serves as a short-lived lock. diff --git a/src/pool.c b/src/pool.c index 159a28a1b..43359403f 100644 --- a/src/pool.c +++ b/src/pool.c @@ -1049,7 +1049,8 @@ void *pool_destroy(struct pool_head *pool) list_for_each_entry_safe(reg, back, &pool->regs, list) { LIST_DELETE(®->list); - free(reg); + if (!(reg->flags & MEM_F_STATREG)) + free(reg); } LIST_DELETE(&pool->list);