in include/yyjson/yyjson.c [1060:1084]
static void pool_free(void *ctx_ptr, void *ptr) {
/* assert(ptr != NULL) */
pool_ctx *ctx = (pool_ctx *)ctx_ptr;
pool_chunk *cur = ((pool_chunk *)ptr) - 1;
pool_chunk *prev = NULL, *next = ctx->free_list;
while (next && next < cur) {
prev = next;
next = next->next;
}
if (prev) prev->next = cur;
else ctx->free_list = cur;
cur->next = next;
if (next && ((u8 *)cur + cur->size) == (u8 *)next) {
/* merge cur to higher chunk */
cur->size += next->size;
cur->next = next->next;
}
if (prev && ((u8 *)prev + prev->size) == (u8 *)cur) {
/* merge cur to lower chunk */
prev->size += cur->size;
prev->next = cur->next;
}
}