lkfqWrite(lkfq_tc_t* pQ, lkfq_data_p pD) { CCURASSERT(pQ); CCURASSERT(pD); if(pQ && pD) { /* Flush the freelist before writing. */ lkfqFlushFreeList(pQ); #if TRANSC_LKFQ_LOCKCK /* pQ->tQAlloc Mutex here */ if(pQ->bLock) pthread_mutex_lock(&(pQ->tQAlloc.tLock)); #endif /* TRANSC_LKFQ_LOCKCK */ if(MISC_LKFQ_STS_FAIL == lfds611_queue_enqueue(pQ->tQAlloc.pRbQs,pD)) { cp_mempool_free(pQ->pMp, pD); } #if TRANSC_LKFQ_LOCKCK /* pQ->tQAlloc Mutex here */ if(pQ->bLock) pthread_mutex_unlock(&(pQ->tQAlloc.tLock)); #endif /* TRANSC_LKFQ_LOCKCK */ } }
lkfqFlushFreeList(lkfq_tc_t * pQ) { lkfq_data_p _pD; BOOL _bElemAvail = TRUE; CCURASSERT(pQ); if(pQ) { #if TRANSC_LKFQ_LOCKCK /* pQ->tQFree Mutex here */ if(pQ->bLock) pthread_mutex_lock(&(pQ->tQFree.tLock)); #endif /* TRANSC_LKFQ_LOCKCK */ while(_bElemAvail) { if(MISC_LKFQ_STS_FAIL == lfds611_queue_dequeue( pQ->tQFree.pRbQs, &_pD )) { _bElemAvail = FALSE; } else { cp_mempool_free(pQ->pMp, _pD); _bElemAvail = TRUE; } } #if TRANSC_LKFQ_LOCKCK /* pQ->tQFree Mutex here */ if(pQ->bLock) pthread_mutex_unlock(&(pQ->tQFree.tLock)); #endif /* TRANSC_LKFQ_LOCKCK */ } }
lkfqFree(lkfq_tc_t * pQ, lkfq_data_p pD) { CCURASSERT(pQ); CCURASSERT(pD); if(pQ && pD) cp_mempool_free(pQ->pMp, pD); }
int main() { cp_mempool *node_pool; node_pool = cp_mempool_create_by_option(COLLECTION_MODE_NOSYNC, sizeof(node), 20); node* n1, *n2, *n3, *n4, *n5; n1 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); n2 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); n3 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); n4 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); n5 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); cp_mempool_free(node_pool, n1); printMemPoolInfo( node_pool ); cp_mempool_free(node_pool, n3); printMemPoolInfo( node_pool ); cp_mempool_free(node_pool, n5); printMemPoolInfo( node_pool ); n2 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); n2 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); n2 = (node *) cp_mempool_alloc(node_pool); printMemPoolInfo( node_pool ); }
void cp_avltree_destroy_node(cp_avltree *tree, cp_avlnode *node) { if (node) { if ((tree->mode & COLLECTION_MODE_DEEP)) { if (tree->key_dtr) (*tree->key_dtr)(node->key); if ((tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) && node->value) cp_vector_destroy_custom(node->value, tree->value_dtr); else if (tree->value_dtr) (*tree->value_dtr)(node->value); } else if ((tree->mode & COLLECTION_MODE_MULTIPLE_VALUES) && node->value) cp_vector_destroy(node->value); if (tree->mempool) cp_mempool_free(tree->mempool, node); else free(node); } }