|
|
|
@ -168,6 +168,9 @@ Pool *PoolInit(uint32_t size, uint32_t prealloc_size, uint32_t elt_size, void *
|
|
|
|
|
|
|
|
|
|
pb->next = p->alloc_list;
|
|
|
|
|
p->alloc_list = pb;
|
|
|
|
|
if (p->alloc_list_tail == NULL) {
|
|
|
|
|
p->alloc_list_tail = pb;
|
|
|
|
|
}
|
|
|
|
|
p->alloc_list_size++;
|
|
|
|
|
} else {
|
|
|
|
|
PoolBucket *pb = p->empty_list;
|
|
|
|
@ -188,6 +191,9 @@ Pool *PoolInit(uint32_t size, uint32_t prealloc_size, uint32_t elt_size, void *
|
|
|
|
|
|
|
|
|
|
pb->next = p->alloc_list;
|
|
|
|
|
p->alloc_list = pb;
|
|
|
|
|
if (p->alloc_list_tail == NULL) {
|
|
|
|
|
p->alloc_list_tail = pb;
|
|
|
|
|
}
|
|
|
|
|
p->alloc_list_size++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -222,6 +228,7 @@ void PoolFree(Pool *p) {
|
|
|
|
|
SCFree(pb);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
p->alloc_list_tail = NULL;
|
|
|
|
|
|
|
|
|
|
while (p->empty_list != NULL) {
|
|
|
|
|
PoolBucket *pb = p->empty_list;
|
|
|
|
@ -262,6 +269,8 @@ void *PoolGet(Pool *p) {
|
|
|
|
|
if (pb != NULL) {
|
|
|
|
|
/* pull from the alloc list */
|
|
|
|
|
p->alloc_list = pb->next;
|
|
|
|
|
if (pb->next == NULL)
|
|
|
|
|
p->alloc_list_tail = NULL;
|
|
|
|
|
p->alloc_list_size--;
|
|
|
|
|
|
|
|
|
|
/* put in the empty list */
|
|
|
|
@ -331,8 +340,13 @@ void PoolReturn(Pool *p, void *data) {
|
|
|
|
|
p->empty_list_size--;
|
|
|
|
|
|
|
|
|
|
/* put in the alloc list */
|
|
|
|
|
pb->next = p->alloc_list;
|
|
|
|
|
p->alloc_list = pb;
|
|
|
|
|
pb->next = NULL;
|
|
|
|
|
if (p->alloc_list_tail == NULL) {
|
|
|
|
|
p->alloc_list = pb;
|
|
|
|
|
} else {
|
|
|
|
|
p->alloc_list_tail->next = pb;
|
|
|
|
|
}
|
|
|
|
|
p->alloc_list_tail = pb;
|
|
|
|
|
p->alloc_list_size++;
|
|
|
|
|
|
|
|
|
|
pb->data = data;
|
|
|
|
|