76 |
76 |
77 job->callback(job->data); |
77 job->callback(job->data); |
78 |
78 |
79 free(job); |
79 free(job); |
80 } |
80 } |
81 ws_atomic_dec32(&pool->num_threads); |
81 uint32_t nthreads = ws_atomic_dec32(&pool->num_threads); |
|
82 if(nthreads == 0) { |
|
83 log_ereport(LOG_INFORM, "threadpool closed"); // TODO: log threadpool name |
|
84 } |
82 return NULL; |
85 return NULL; |
83 } |
86 } |
84 |
87 |
85 threadpool_job* threadpool_get_job(threadpool_t *pool) { |
88 threadpool_job* threadpool_get_job(threadpool_t *pool) { |
86 pthread_mutex_lock(&pool->queue_lock); |
89 pthread_mutex_lock(&pool->queue_lock); |