/** * Clean up engine. * */ void engine_cleanup(engine_type* engine) { size_t i = 0; if (!engine) { return; } if (engine->workers && engine->config) { for (i=0; i < (size_t) engine->config->num_worker_threads; i++) { worker_cleanup(engine->workers[i]); } free(engine->workers); } if (engine->drudgers && engine->config) { for (i=0; i < (size_t) engine->config->num_signer_threads; i++) { worker_cleanup(engine->drudgers[i]); } free(engine->drudgers); } zonelist_cleanup(engine->zonelist); schedule_cleanup(engine->taskq); fifoq_cleanup(engine->signq); cmdhandler_cleanup(engine->cmdhandler); dnshandler_cleanup(engine->dnshandler); xfrhandler_cleanup(engine->xfrhandler); engine_config_cleanup(engine->config); lock_basic_destroy(&engine->signal_lock); lock_basic_off(&engine->signal_cond); free(engine); }
/** * Clean up queue. * */ void fifoq_cleanup(fifoq_type* q) { allocator_type* allocator; lock_basic_type q_lock; cond_basic_type q_threshold; cond_basic_type q_nonfull; if (!q) { return; } allocator = q->allocator; q_lock = q->q_lock; q_threshold = q->q_threshold; q_nonfull = q->q_nonfull; allocator_deallocate(allocator, (void*) q); lock_basic_off(&q_threshold); lock_basic_off(&q_nonfull); lock_basic_destroy(&q_lock); return; }
/** * Clean up worker. * */ void worker_cleanup(worker_type* worker) { allocator_type* allocator; cond_basic_type worker_cond; lock_basic_type worker_lock; if (!worker) { return; } allocator = worker->allocator; worker_cond = worker->worker_alarm; worker_lock = worker->worker_lock; allocator_deallocate(allocator, (void*) worker); lock_basic_destroy(&worker_lock); lock_basic_off(&worker_cond); return; }
/** * Clean up engine. * */ void engine_cleanup(engine_type* engine) { size_t i = 0; allocator_type* allocator; cond_basic_type signal_cond; lock_basic_type signal_lock; if (!engine) { return; } allocator = engine->allocator; signal_cond = engine->signal_cond; signal_lock = engine->signal_lock; if (engine->workers && engine->config) { for (i=0; i < (size_t) engine->config->num_worker_threads; i++) { worker_cleanup(engine->workers[i]); } allocator_deallocate(allocator, (void*) engine->workers); } #if HAVE_DRUDGERS if (engine->drudgers && engine->config) { for (i=0; i < (size_t) engine->config->num_signer_threads; i++) { worker_cleanup(engine->drudgers[i]); } allocator_deallocate(allocator, (void*) engine->drudgers); } #endif schedule_cleanup(engine->taskq); fifoq_cleanup(engine->signq); cmdhandler_cleanup(engine->cmdhandler); engine_config_cleanup(engine->config); allocator_deallocate(allocator, (void*) engine); lock_basic_destroy(&signal_lock); lock_basic_off(&signal_cond); allocator_cleanup(allocator); return; }