We must not free these ones when destroying a pool, so let's dedicate
them a flag to mention that they are static. For now we don't have any
such.
#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.
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);