void BLI_task_pool_free(TaskPool *pool) { BLI_task_pool_stop(pool); BLI_mutex_end(&pool->num_mutex); BLI_condition_end(&pool->num_cond); BLI_mutex_end(&pool->user_mutex); /* Free local memory pool, those pointers are lost forever. */ if (pool->task_mempool == &pool->task_mempool_local) { for (int i = 0; i < pool->task_mempool_local.num_tasks; i++) { MEM_freeN(pool->task_mempool_local.tasks[i]); } } #ifdef DEBUG_STATS printf("Thread ID Allocated Reused Discarded\n"); for (int i = 0; i < pool->scheduler->num_threads + 1; ++i) { printf("%02d %05d %05d %05d\n", i, pool->mempool_stats[i].num_alloc, pool->mempool_stats[i].num_reuse, pool->mempool_stats[i].num_discard); } MEM_freeN(pool->mempool_stats); #endif MEM_freeN(pool); BLI_end_threaded_malloc(); }
void BLI_task_pool_free(TaskPool *pool) { BLI_task_pool_stop(pool); BLI_mutex_end(&pool->num_mutex); BLI_condition_end(&pool->num_cond); BLI_mutex_end(&pool->user_mutex); MEM_freeN(pool); BLI_end_threaded_malloc(); }