static BT_ERROR init_cache(BT_CACHE *pCache, BT_u32 ulObjectSize) { pCache->ulObjectSize = ulObjectSize; pCache->free = NULL; pCache->allocated = 0; extend_cache(pCache); return BT_ERR_NONE; }
static BT_ERROR init_cache(BT_CACHE *pCache, BT_u32 ulObjectSize) { BT_LIST_INIT_HEAD(&pCache->blocks); pCache->ulObjectSize = ulObjectSize; pCache->free = NULL; pCache->allocated = 0; extend_cache(pCache); return BT_ERR_NONE; }
static void *BT_CacheAlloc(BT_CACHE *pCache) { struct block_free *p = pop_free(pCache); if(!p) { extend_cache(pCache); p = pop_free(pCache); if(!p) { return NULL; } } return (void *) p; }
void *BT_CacheAlloc(BT_CACHE *pCache) { SLAB_LOCK(pCache); struct block_free *p = pop_free(pCache); if(!p) { extend_cache(pCache); p = pop_free(pCache); if(!p) { SLAB_UNLOCK(pCache); return NULL; } } SLAB_UNLOCK(pCache); return (void *) p; }