From 810b2389dc0b83f835e213c4b93e5cbdb6b1fb46 Mon Sep 17 00:00:00 2001 From: Hallvard Furuseth Date: Wed, 9 May 2007 23:25:03 +0000 Subject: [PATCH] Since we only have LDAP_MAXTHR thread_keys, allow max LDAP_MAXTHR threads per pool, even when ltp_max_count <= 0 ("unlimited"). Keep ltp_max_count in range [0, LDAP_MAXTHR]. --- libraries/libldap_r/tpool.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libraries/libldap_r/tpool.c b/libraries/libldap_r/tpool.c index 5171d35bf1..738d971077 100644 --- a/libraries/libldap_r/tpool.c +++ b/libraries/libldap_r/tpool.c @@ -269,6 +269,9 @@ ldap_pvt_thread_pool_init ( ldap_pvt_thread_pool_t pool; int rc; + if (! (0 <= max_threads && max_threads <= LDAP_MAXTHR)) + max_threads = 0; + *tpool = NULL; pool = (ldap_pvt_thread_pool_t) LDAP_CALLOC(1, sizeof(struct ldap_int_thread_pool_s)); @@ -383,8 +386,8 @@ ldap_pvt_thread_pool_submit ( } ldap_pvt_thread_cond_signal(&pool->ltp_cond); if (pool->ltp_open_count < pool->ltp_active_count + pool->ltp_pending_count - && (pool->ltp_open_count < pool->ltp_max_count || - pool->ltp_max_count <= 0 )) + && (pool->ltp_open_count < + (pool->ltp_max_count ? pool->ltp_max_count : LDAP_MAXTHR))) { pool->ltp_open_count++; pool->ltp_starting++; @@ -449,6 +452,9 @@ ldap_pvt_thread_pool_maxthreads ( ldap_pvt_thread_pool_t *tpool, int max_threads { struct ldap_int_thread_pool_s *pool; + if (! (0 <= max_threads && max_threads <= LDAP_MAXTHR)) + max_threads = 0; + if (tpool == NULL) return(-1); @@ -681,8 +687,8 @@ ldap_int_thread_pool_wrapper ( if (pool->ltp_state == LDAP_INT_THREAD_POOL_FINISHING) break; - if (pool->ltp_max_count > 0 - && pool->ltp_open_count > pool->ltp_max_count) + if (pool->ltp_open_count > + (pool->ltp_max_count ? pool->ltp_max_count : LDAP_MAXTHR)) { /* too many threads running (can happen if the * maximum threads value is set during ongoing -- 2.39.5