]> git.sur5r.net Git - openldap/commitdiff
Since we only have LDAP_MAXTHR thread_keys, allow max LDAP_MAXTHR
authorHallvard Furuseth <hallvard@openldap.org>
Wed, 9 May 2007 23:25:03 +0000 (23:25 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Wed, 9 May 2007 23:25:03 +0000 (23:25 +0000)
threads per pool, even when ltp_max_count <= 0 ("unlimited").
Keep ltp_max_count in range [0, LDAP_MAXTHR].

libraries/libldap_r/tpool.c

index 5171d35bf1cc2c6224329ce3bbd7028a03e1fbb4..738d971077f4b5fc0ee5f807de3c31922c1e2475 100644 (file)
@@ -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