/* If we are last thread, signal the waiting destructor. */
if (silc_list_count(tp->threads) == 0)
- silc_cond_signal(pool_signal);
+ silc_cond_broadcast(pool_signal);
/* Release pool reference. Releases lock also. */
silc_thread_pool_unref(tp);
silc_list_start(tp->threads);
while ((t = silc_list_get(tp->threads)))
t->stop = TRUE;
- silc_cond_signal(tp->pool_signal);
+ silc_cond_broadcast(tp->pool_signal);
if (wait_unfinished) {
SILC_LOG_DEBUG(("Wait threads to finish"));
silc_list_del(tp->free_threads, t);
/* Signal threads */
- silc_cond_signal(tp->pool_signal);
+ silc_cond_broadcast(tp->pool_signal);
silc_mutex_unlock(tp->lock);
return TRUE;
silc_mutex_lock(tp->lock);
if (silc_list_count(tp->free_threads) <= tp->min_threads) {
+ SILC_LOG_DEBUG(("No threads to purge"));
silc_mutex_unlock(tp->lock);
return;
}
}
/* Signal threads to stop */
- silc_cond_signal(tp->pool_signal);
+ silc_cond_broadcast(tp->pool_signal);
silc_mutex_unlock(tp->lock);
}