mem: checkfree assertion after debug list dump

When a memory context is destroyed, if the `checkfree` property is set,
the program assert there is no remaining allocation. If there are and
assertions are enabled, the program immediately stops.

However, if memory trace/record debug is enabled, the dump of
outstanding allocation won't be printed as it is done after the
no remaining allocation assertion check.

This moves the no remaining allocation assertion check after the dump of
outstanding allocations, so it is still possible to figure out what's
still allocated by this memory context.
This commit is contained in:
Colin Vidal 2025-10-17 10:54:09 +02:00
parent 0caba8e9ce
commit 9f4ff7dec4

View file

@ -553,14 +553,6 @@ mem_destroy(isc_mem_t *ctx) {
ISC_LIST_UNLINK(contexts, ctx, link);
UNLOCK(&contextslock);
if (ctx->checkfree) {
INSIST(isc_mem_inuse(ctx) == 0);
}
ctx->magic = 0;
INSIST(ISC_LIST_EMPTY(ctx->pools));
#if ISC_MEM_TRACKLINES
if (ctx->debuglist != NULL) {
for (size_t i = 0; i < DEBUG_TABLE_COUNT; i++) {
@ -582,6 +574,14 @@ mem_destroy(isc_mem_t *ctx) {
}
#endif /* if ISC_MEM_TRACKLINES */
if (ctx->checkfree) {
INSIST(isc_mem_inuse(ctx) == 0);
}
ctx->magic = 0;
INSIST(ISC_LIST_EMPTY(ctx->pools));
free(ctx->name);
isc_mutex_destroy(&ctx->lock);