|
@@ -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;
|
|
|
}
|