DOH *DohObjMalloc(DohObjInfo *type, void *data) { DohBase *obj; if (!pools_initialized) InitPools(); #ifndef DOH_DEBUG_MEMORY_POOLS if (FreeList) { obj = FreeList; FreeList = (DohBase *) obj->data; } else { #endif while (Pools->current == Pools->len) { CreatePool(); } obj = Pools->ptr + Pools->current; ++Pools->current; #ifndef DOH_DEBUG_MEMORY_POOLS } #endif obj->type = type; obj->data = data; obj->meta = 0; obj->refcount = 1; obj->flag_intern = 0; obj->flag_marked = 0; obj->flag_user = 0; obj->flag_usermark = 0; return (DOH *) obj; }
void CTriNodePool::ResetAll() { bool ranOutOfNodes = false; for (CTriNodePool* p: pools) { ranOutOfNodes |= p->RunOutOfNodes(); p->Reset(); } if (ranOutOfNodes && (poolSize < MAX_POOL_SIZE)) { FreePools(); InitPools(std::min(poolSize * 2, size_t(MAX_POOL_SIZE))); } }