void stpcDeferredDelete(stpcProxy *proxy, void (*freeData)(void *), void *data, void (*backoff)(int)) { stpcNode *node; int n = 0; while ((node = _newNode(proxy, true)) == NULL) { backoff(n++); } node->freeData = freeData; node->data = data; _queueNode(proxy, node); }
unsigned int stpcTryDeleteProxyNodes(stpcProxy *proxy, unsigned int count) { unsigned int n = 0; unsigned int current = atomic_load_explicit(&proxy->numNodes, memory_order_relaxed); for (n = 0; n < count && current > 1; n++) { stpcNode *node = _newNode(proxy, false); if (node == NULL) break; proxy->freeMem(node); current = atomic_sub_fetch_explicit(&proxy->numNodes, 1, memory_order_relaxed); } return n; }
void PBnode::addNode(PBnode* node) { PBrefPtr<PBnode> _newNode(node); _nodes.push_back(_newNode); }