#define LDAP_THREAD_POOL_IMPLEMENTATION
#include "ldap_thr_debug.h" /* May rename symbols defined below */
-#ifdef LDAP_DEVEL
-/* #define SLAP_SEM_LOAD_CONTROL /* must also be defined in slapd.h */
-#endif
-
#ifndef LDAP_THREAD_HAVE_TPOOL
typedef enum ldap_int_thread_pool_state_e {
ldap_lazy_sem_t* thread_pool_sem = NULL;
int
-ldap_lazy_sem_init( unsigned int value, unsigned int lazyness ) {
+ldap_lazy_sem_init( unsigned int value, unsigned int lazyness )
+{
thread_pool_sem = (ldap_lazy_sem_t*) LDAP_CALLOC(1,
sizeof( ldap_lazy_sem_t ));
return 0;
}
+/* FIXME: move to some approprite header */
+int ldap_lazy_sem_dec( ldap_lazy_sem_t* ls );
+int ldap_lazy_sem_wait ( ldap_lazy_sem_t* ls );
+
/*
* ldap_lazy_sem_wait is used if a caller is blockable(listener).
* Otherwise use ldap_lazy_sem_dec (worker)
*/
int
-ldap_lazy_sem_op_submit( ldap_lazy_sem_t* ls ) {
+ldap_lazy_sem_op_submit( ldap_lazy_sem_t* ls )
+{
if ( ls == NULL ) return -1;
/* only worker thread has its thread ctx */
* If not, the count is decremented.
*/
int
-ldap_lazy_sem_wait ( ldap_lazy_sem_t* ls ) {
+ldap_lazy_sem_wait ( ldap_lazy_sem_t* ls )
+{
ldap_pvt_thread_mutex_lock( &ls->ls_mutex );
lazy_sem_retry:
* even when the count becomes less than or equal to 0
*/
int
-ldap_lazy_sem_dec ( ldap_lazy_sem_t* ls ) {
+ldap_lazy_sem_dec( ldap_lazy_sem_t* ls )
+{
ldap_pvt_thread_mutex_lock( &ls->ls_mutex );
ls->ls_sem_value--;
* equal to lazyness. If it is, wake up a blocked thread.
*/
int
-ldap_lazy_sem_post( ldap_lazy_sem_t* ls ) {
-
+ldap_lazy_sem_post( ldap_lazy_sem_t* ls )
+{
if( ls == NULL ) return (-1);
ldap_pvt_thread_mutex_lock( &ls->ls_mutex );
}
ldap_pvt_thread_mutex_unlock(&pool->ltp_mutex);
-#ifdef SLAP_SEM_LOAD_CONTROL
+#ifdef LDAP_PVT_THREAD_POOL_SEM_LOAD_CONTROL
ldap_lazy_sem_op_submit( thread_pool_sem );
#endif
ldap_pvt_thread_cond_destroy(&pool->ltp_cond);
ldap_pvt_thread_mutex_destroy(&pool->ltp_mutex);
LDAP_FREE(pool);
-#ifdef SLAP_SEM_LOAD_CONTROL
+#ifdef LDAP_PVT_THREAD_POOL_SEM_LOAD_CONTROL
if ( thread_pool_sem ) {
LDAP_FREE( thread_pool_sem );
}
ctx->ltc_start_routine(ltc_key, ctx->ltc_arg);
-#ifdef SLAP_SEM_LOAD_CONTROL
+#ifdef LDAP_PVT_THREAD_POOL_SEM_LOAD_CONTROL
ldap_lazy_sem_post( thread_pool_sem );
#endif
ldap_pvt_thread_mutex_lock(&pool->ltp_mutex);