diff --git a/src/extras/rmem.h b/src/extras/rmem.h index 7f50adf8..43005cfe 100644 --- a/src/extras/rmem.h +++ b/src/extras/rmem.h @@ -276,7 +276,10 @@ static void __InsertMemNode(MemPool *const mempool, AllocList *const list, MemNo mempool->arena.offs += iter->size; __RemoveMemNode(list, iter); iter = list->head; - if (iter == NULL) return; + if (iter == NULL) { + list->head = node; + return; + } } const uintptr_t inode = ( uintptr_t )node; const uintptr_t iiter = ( uintptr_t )iter; @@ -293,6 +296,14 @@ static void __InsertMemNode(MemPool *const mempool, AllocList *const list, MemNo iter->size += node->size; return; } + else if (iter->next == NULL) + { + // we reached the end of the free list -> append the node + iter->next = node; + node->prev = iter; + list->len++; + return; + } } else if (iter > node) { @@ -326,7 +337,7 @@ static void __InsertMemNode(MemPool *const mempool, AllocList *const list, MemNo } else { - __InsertMemNodeBefore(list, iter, node); + __InsertMemNodeBefore(list, node, iter); list->len++; return; }