/* Function: MemBucket *mempool_alloc(MemPool *mempool); * * Purpose: allocate a new object from the mempool * Args: mempool - pointer to a MemPool struct * * Returns: a pointer to the mempool object on success, NULL on failure */ MemBucket *mempool_alloc(MemPool *mempool) { SDListItem *li = NULL; MemBucket *b; if(mempool == NULL) { return NULL; } if(mempool->free <= 0) { return NULL; } /* get one item off the free_list, put one item on the usedlist */ li = mempool->free_list.head; mempool->free--; if((li == NULL) || sf_sdlist_remove(&mempool->free_list, li)) { printf("Failure on sf_sdlist_remove\n"); return NULL; } mempool->used++; if(sf_sdlist_append(&mempool->used_list, li->data, li)) { printf("Failure on sf_sdlist_append\n"); return NULL; } /* TBD -- make configurable */ b = li->data; bzero(b->data, mempool->obj_size); return b; }
void mempool_free(MemPool *mempool, MemBucket *obj) { if(sf_sdlist_remove(&mempool->used_list, obj->key)) { printf("failure on remove from used_list"); return; } mempool->used--; /* put the address of the membucket back in the list */ if(sf_sdlist_append(&mempool->free_list, obj, obj->key)) { printf("failure on add to free_list"); return; } mempool->free++; return; }
void mempool_free(MemPool *mempool, MemBucket *obj) { if ((mempool == NULL) || (obj == NULL)) return; if(sf_sdlist_remove(&mempool->used_list, obj->key)) { #ifdef TEST_MEMPOOL printf("failure on remove from used_list"); #endif return; } /* put the address of the membucket back in the list */ if(sf_sdlist_append(&mempool->free_list, obj, obj->key)) { #ifdef TEST_MEMPOOL printf("failure on add to free_list"); #endif return; } return; }