void mempool_node_put(mempool p, void *data) { struct node *node; node = DATA_TO_NODE(data); #ifdef MEMPOOLASSERT if(node->magic != NODE_MAGIC) { ShowError(read_message("Source.common.mempool_node_put"), p->name, data); return; // lost, } { struct pool_segment *node_seg = node->segment; if(node_seg->pool != p) { ShowError(read_message("Source.common.mempool_node_put2"), p->name, data, node_seg->pool); return; } } // reset used flag. node->used = false; #endif // EnterSpinLock(&p->nodeLock); node->next = p->free_list; p->free_list = node; LeaveSpinLock(&p->nodeLock); InterlockedIncrement64(&p->num_nodes_free); }//end: mempool_node_put()
void mempool_node_put(mempool p, void *data){ struct node *node; node = DATA_TO_NODE(data); #ifdef MEMPOOLASSERT if(node->magic != NODE_MAGIC){ ShowError("Mempool [%s] node_put failed, given address (%p) has invalid magic.\n", p->name, data); return; // lost, } { struct pool_segment *node_seg = node->segment; if(node_seg->pool != p){ ShowError("Mempool [%s] node_put faild, given node (data address %p) doesnt belongs to this pool. ( Node Origin is [%s] )\n", p->name, data, node_seg->pool); return; } } // reset used flag. node->used = false; #endif // EnterSpinLock(&p->nodeLock); node->next = p->free_list; p->free_list = node; LeaveSpinLock(&p->nodeLock); InterlockedIncrement64(&p->num_nodes_free); }//end: mempool_node_put()