Lines Matching refs:pool
196 static void *ldap_int_thread_pool_wrapper( void *pool );
214 struct ldap_int_thread_pool_s *pool; in ldap_int_thread_pool_shutdown() local
216 while ((pool = LDAP_STAILQ_FIRST(&ldap_int_thread_pool_list)) != NULL) { in ldap_int_thread_pool_shutdown()
217 (ldap_pvt_thread_pool_destroy)(&pool, 0); /* ignore thr_debug macro */ in ldap_int_thread_pool_shutdown()
233 ldap_pvt_thread_pool_t pool; in ldap_pvt_thread_pool_init_q() local
246 pool = (ldap_pvt_thread_pool_t) LDAP_CALLOC(1, in ldap_pvt_thread_pool_init_q()
249 if (pool == NULL) return(-1); in ldap_pvt_thread_pool_init_q()
251 pool->ltp_wqs = LDAP_MALLOC(numqs * sizeof(struct ldap_int_thread_poolq_s *)); in ldap_pvt_thread_pool_init_q()
252 if (pool->ltp_wqs == NULL) { in ldap_pvt_thread_pool_init_q()
253 LDAP_FREE(pool); in ldap_pvt_thread_pool_init_q()
261 LDAP_FREE(pool->ltp_wqs[i]->ltp_free); in ldap_pvt_thread_pool_init_q()
262 LDAP_FREE(pool->ltp_wqs); in ldap_pvt_thread_pool_init_q()
263 LDAP_FREE(pool); in ldap_pvt_thread_pool_init_q()
266 …pool->ltp_wqs[i] = (struct ldap_int_thread_poolq_s *)(((size_t)ptr + CACHELINE-1) & ~(CACHELINE-1)… in ldap_pvt_thread_pool_init_q()
267 pool->ltp_wqs[i]->ltp_free = ptr; in ldap_pvt_thread_pool_init_q()
270 pool->ltp_numqs = numqs; in ldap_pvt_thread_pool_init_q()
271 pool->ltp_conf_max_count = max_threads; in ldap_pvt_thread_pool_init_q()
275 rc = ldap_pvt_thread_mutex_init(&pool->ltp_mutex); in ldap_pvt_thread_pool_init_q()
279 LDAP_FREE(pool->ltp_wqs[i]->ltp_free); in ldap_pvt_thread_pool_init_q()
280 LDAP_FREE(pool->ltp_wqs); in ldap_pvt_thread_pool_init_q()
281 LDAP_FREE(pool); in ldap_pvt_thread_pool_init_q()
285 rc = ldap_pvt_thread_cond_init(&pool->ltp_cond); in ldap_pvt_thread_pool_init_q()
289 rc = ldap_pvt_thread_cond_init(&pool->ltp_pcond); in ldap_pvt_thread_pool_init_q()
296 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_init_q()
297 pq->ltp_pool = pool; in ldap_pvt_thread_pool_init_q()
322 pool->ltp_max_count = max_threads; in ldap_pvt_thread_pool_init_q()
323 pool->ltp_max_pending = max_pending; in ldap_pvt_thread_pool_init_q()
326 LDAP_STAILQ_INSERT_TAIL(&ldap_int_thread_pool_list, pool, ltp_next); in ldap_pvt_thread_pool_init_q()
336 *tpool = pool; in ldap_pvt_thread_pool_init_q()
365 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_submit2() local
374 pool = *tpool; in ldap_pvt_thread_pool_submit2()
376 if (pool == NULL) in ldap_pvt_thread_pool_submit2()
379 if ( pool->ltp_numqs > 1 ) { in ldap_pvt_thread_pool_submit2()
380 int min = pool->ltp_wqs[0]->ltp_max_pending + pool->ltp_wqs[0]->ltp_max_count; in ldap_pvt_thread_pool_submit2()
382 for ( i = 0; i < pool->ltp_numqs; i++ ) { in ldap_pvt_thread_pool_submit2()
384 if ( !pool->ltp_wqs[i]->ltp_active_count ) { in ldap_pvt_thread_pool_submit2()
388 cnt = pool->ltp_wqs[i]->ltp_active_count + pool->ltp_wqs[i]->ltp_pending_count; in ldap_pvt_thread_pool_submit2()
400 ldap_pvt_thread_mutex_lock(&pool->ltp_wqs[i]->ltp_mutex); in ldap_pvt_thread_pool_submit2()
401 if (pool->ltp_wqs[i]->ltp_pending_count < pool->ltp_wqs[i]->ltp_max_pending) { in ldap_pvt_thread_pool_submit2()
404 ldap_pvt_thread_mutex_unlock(&pool->ltp_wqs[i]->ltp_mutex); in ldap_pvt_thread_pool_submit2()
406 i %= pool->ltp_numqs; in ldap_pvt_thread_pool_submit2()
411 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_submit2()
430 if (pool->ltp_pause) in ldap_pvt_thread_pool_submit2()
535 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_walk() local
543 pool = *tpool; in ldap_pvt_thread_pool_walk()
545 if (pool == NULL) in ldap_pvt_thread_pool_walk()
548 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_pvt_thread_pool_walk()
549 assert(pool->ltp_pause == PAUSED); in ldap_pvt_thread_pool_walk()
550 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_pvt_thread_pool_walk()
552 for (i=0; i<pool->ltp_numqs; i++) { in ldap_pvt_thread_pool_walk()
553 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_walk()
574 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_queues() local
581 pool = *tpool; in ldap_pvt_thread_pool_queues()
583 if (pool == NULL) in ldap_pvt_thread_pool_queues()
586 if (numqs < pool->ltp_numqs) { in ldap_pvt_thread_pool_queues()
587 for (i=numqs; i<pool->ltp_numqs; i++) in ldap_pvt_thread_pool_queues()
588 pool->ltp_wqs[i]->ltp_max_count = 0; in ldap_pvt_thread_pool_queues()
589 } else if (numqs > pool->ltp_numqs) { in ldap_pvt_thread_pool_queues()
591 wqs = LDAP_REALLOC(pool->ltp_wqs, numqs * sizeof(struct ldap_int_thread_poolq_s *)); in ldap_pvt_thread_pool_queues()
594 pool->ltp_wqs = wqs; in ldap_pvt_thread_pool_queues()
595 for (i=pool->ltp_numqs; i<numqs; i++) { in ldap_pvt_thread_pool_queues()
599 pool->ltp_wqs[i] = NULL; in ldap_pvt_thread_pool_queues()
604 pool->ltp_wqs[i] = pq; in ldap_pvt_thread_pool_queues()
605 pq->ltp_pool = pool; in ldap_pvt_thread_pool_queues()
617 rem_thr = pool->ltp_max_count % numqs; in ldap_pvt_thread_pool_queues()
618 rem_pend = pool->ltp_max_pending % numqs; in ldap_pvt_thread_pool_queues()
620 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_queues()
621 pq->ltp_max_count = pool->ltp_max_count / numqs; in ldap_pvt_thread_pool_queues()
626 pq->ltp_max_pending = pool->ltp_max_pending / numqs; in ldap_pvt_thread_pool_queues()
632 pool->ltp_numqs = numqs; in ldap_pvt_thread_pool_queues()
642 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_maxthreads() local
652 pool = *tpool; in ldap_pvt_thread_pool_maxthreads()
654 if (pool == NULL) in ldap_pvt_thread_pool_maxthreads()
657 pool->ltp_conf_max_count = max_threads; in ldap_pvt_thread_pool_maxthreads()
660 pool->ltp_max_count = max_threads; in ldap_pvt_thread_pool_maxthreads()
662 remthr = max_threads % pool->ltp_numqs; in ldap_pvt_thread_pool_maxthreads()
663 max_threads /= pool->ltp_numqs; in ldap_pvt_thread_pool_maxthreads()
665 for (i=0; i<pool->ltp_numqs; i++) { in ldap_pvt_thread_pool_maxthreads()
666 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_maxthreads()
683 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_query() local
690 pool = *tpool; in ldap_pvt_thread_pool_query()
692 if ( pool == NULL ) { in ldap_pvt_thread_pool_query()
698 count = pool->ltp_conf_max_count; in ldap_pvt_thread_pool_query()
702 count = pool->ltp_max_pending; in ldap_pvt_thread_pool_query()
710 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_pvt_thread_pool_query()
711 count = (pool->ltp_pause != 0); in ldap_pvt_thread_pool_query()
712 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_pvt_thread_pool_query()
723 for (i=0; i<pool->ltp_numqs; i++) { in ldap_pvt_thread_pool_query()
724 struct ldap_int_thread_poolq_s *pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_query()
762 if (pool->ltp_pause) in ldap_pvt_thread_pool_query()
764 else if (!pool->ltp_finishing) in ldap_pvt_thread_pool_query()
768 for (i=0; i<pool->ltp_numqs; i++) in ldap_pvt_thread_pool_query()
769 if (pool->ltp_wqs[i]->ltp_pending_count) break; in ldap_pvt_thread_pool_query()
770 if (i<pool->ltp_numqs) in ldap_pvt_thread_pool_query()
796 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_pausing() local
798 if ( tpool != NULL && (pool = *tpool) != NULL ) { in ldap_pvt_thread_pool_pausing()
799 rc = (pool->ltp_pause != 0); in ldap_pvt_thread_pool_pausing()
845 struct ldap_int_thread_pool_s *pool, *pptr; in ldap_pvt_thread_pool_close() local
853 pool = *tpool; in ldap_pvt_thread_pool_close()
855 if (pool == NULL) return(-1); in ldap_pvt_thread_pool_close()
859 if (pptr == pool) break; in ldap_pvt_thread_pool_close()
862 if (pool != pptr) return(-1); in ldap_pvt_thread_pool_close()
864 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_pvt_thread_pool_close()
866 pool->ltp_finishing = 1; in ldap_pvt_thread_pool_close()
867 if (pool->ltp_max_pending > 0) in ldap_pvt_thread_pool_close()
868 pool->ltp_max_pending = -pool->ltp_max_pending; in ldap_pvt_thread_pool_close()
870 ldap_pvt_thread_cond_broadcast(&pool->ltp_cond); in ldap_pvt_thread_pool_close()
871 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_pvt_thread_pool_close()
873 for (i=0; i<pool->ltp_numqs; i++) { in ldap_pvt_thread_pool_close()
874 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_close()
906 struct ldap_int_thread_pool_s *pool, *pptr; in ldap_pvt_thread_pool_free() local
913 pool = *tpool; in ldap_pvt_thread_pool_free()
915 if (pool == NULL) return(-1); in ldap_pvt_thread_pool_free()
919 if (pptr == pool) break; in ldap_pvt_thread_pool_free()
920 if (pptr == pool) in ldap_pvt_thread_pool_free()
921 LDAP_STAILQ_REMOVE(&ldap_int_thread_pool_list, pool, in ldap_pvt_thread_pool_free()
925 if (pool != pptr) return(-1); in ldap_pvt_thread_pool_free()
927 ldap_pvt_thread_cond_destroy(&pool->ltp_pcond); in ldap_pvt_thread_pool_free()
928 ldap_pvt_thread_cond_destroy(&pool->ltp_cond); in ldap_pvt_thread_pool_free()
929 ldap_pvt_thread_mutex_destroy(&pool->ltp_mutex); in ldap_pvt_thread_pool_free()
930 for (i=0; i<pool->ltp_numqs; i++) { in ldap_pvt_thread_pool_free()
931 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_free()
941 LDAP_FREE(pool->ltp_wqs); in ldap_pvt_thread_pool_free()
942 LDAP_FREE(pool); in ldap_pvt_thread_pool_free()
954 struct ldap_int_thread_pool_s *pool = pq->ltp_pool; in ldap_int_thread_pool_wrapper() local
961 assert(pool != NULL); in ldap_int_thread_pool_wrapper()
973 if (pool->ltp_pause) { in ldap_int_thread_pool_wrapper()
974 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
976 while (pool->ltp_pause) in ldap_int_thread_pool_wrapper()
977 ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
978 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
1001 if (pool->ltp_pause) { in ldap_int_thread_pool_wrapper()
1003 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
1005 if (--(pool->ltp_active_queues) < 1) { in ldap_int_thread_pool_wrapper()
1007 ldap_pvt_thread_cond_signal(&pool->ltp_pcond); in ldap_int_thread_pool_wrapper()
1013 if (pool->ltp_finishing || pq->ltp_open_count > pq->ltp_max_count) { in ldap_int_thread_pool_wrapper()
1033 ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
1034 if (!pool->ltp_pause) { in ldap_int_thread_pool_wrapper()
1035 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
1047 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
1076 if (pool->ltp_finishing) in ldap_int_thread_pool_wrapper()
1084 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_int_thread_pool_wrapper()
1111 struct ldap_int_thread_pool_s *pool; in handle_pause() local
1118 pool = *tpool; in handle_pause()
1120 if (pool == NULL) in handle_pause()
1123 if (pause_type == CHECK_PAUSE && !pool->ltp_pause) in handle_pause()
1136 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in handle_pause()
1138 pause = pool->ltp_pause; /* NOT_PAUSED, WANT_PAUSE or PAUSED */ in handle_pause()
1153 pool->ltp_active_queues--; in handle_pause()
1154 if (pool->ltp_active_queues < 1) in handle_pause()
1156 ldap_pvt_thread_cond_signal(&pool->ltp_pcond); in handle_pause()
1165 ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex); in handle_pause()
1166 } while (pool->ltp_pause > max_ltp_pause); in handle_pause()
1178 assert(!pool->ltp_pause); in handle_pause()
1179 pool->ltp_pause = WANT_PAUSE; in handle_pause()
1180 pool->ltp_active_queues = 0; in handle_pause()
1182 for (i=0; i<pool->ltp_numqs; i++) in handle_pause()
1183 if (pool->ltp_wqs[i] == pq) break; in handle_pause()
1191 pq = pool->ltp_wqs[j]; in handle_pause()
1199 pool->ltp_active_queues++; in handle_pause()
1202 if (pool->ltp_numqs > 1) { in handle_pause()
1204 j %= pool->ltp_numqs; in handle_pause()
1209 while (pool->ltp_active_queues > 0) in handle_pause()
1210 ldap_pvt_thread_cond_wait(&pool->ltp_pcond, &pool->ltp_mutex); in handle_pause()
1213 pool->ltp_wqs[i]->ltp_active_count++; in handle_pause()
1215 assert(pool->ltp_pause == WANT_PAUSE); in handle_pause()
1216 pool->ltp_pause = PAUSED; in handle_pause()
1218 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in handle_pause()
1255 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_pausecheck_native() local
1260 pool = *tpool; in ldap_pvt_thread_pool_pausecheck_native()
1262 if (pool == NULL) in ldap_pvt_thread_pool_pausecheck_native()
1265 if (!pool->ltp_pause) in ldap_pvt_thread_pool_pausecheck_native()
1268 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_pvt_thread_pool_pausecheck_native()
1269 while (pool->ltp_pause) in ldap_pvt_thread_pool_pausecheck_native()
1270 ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex); in ldap_pvt_thread_pool_pausecheck_native()
1271 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_pvt_thread_pool_pausecheck_native()
1290 struct ldap_int_thread_pool_s *pool; in ldap_pvt_thread_pool_resume() local
1297 pool = *tpool; in ldap_pvt_thread_pool_resume()
1299 if (pool == NULL) in ldap_pvt_thread_pool_resume()
1302 ldap_pvt_thread_mutex_lock(&pool->ltp_mutex); in ldap_pvt_thread_pool_resume()
1303 assert(pool->ltp_pause == PAUSED); in ldap_pvt_thread_pool_resume()
1304 pool->ltp_pause = 0; in ldap_pvt_thread_pool_resume()
1305 for (i=0; i<pool->ltp_numqs; i++) { in ldap_pvt_thread_pool_resume()
1306 pq = pool->ltp_wqs[i]; in ldap_pvt_thread_pool_resume()
1310 ldap_pvt_thread_cond_broadcast(&pool->ltp_cond); in ldap_pvt_thread_pool_resume()
1311 ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex); in ldap_pvt_thread_pool_resume()