From: Howard Chu Date: Wed, 16 Nov 2005 03:22:21 +0000 (+0000) Subject: ITS#4175 wait for worker threads to be ready X-Git-Tag: OPENLDAP_REL_ENG_2_2_MP~7 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a9c95d36be2168a1a08b86baaca57f12f208aef9;p=openldap ITS#4175 wait for worker threads to be ready --- diff --git a/servers/slapd/back-bdb/tools.c b/servers/slapd/back-bdb/tools.c index 39ff2d728a..09d25571ae 100644 --- a/servers/slapd/back-bdb/tools.c +++ b/servers/slapd/back-bdb/tools.c @@ -64,7 +64,7 @@ static bdb_tool_idl_cache_entry *bdb_tool_idl_free_list; static ID bdb_tool_ix_id; static Operation *bdb_tool_ix_op; -static volatile int *bdb_tool_index_threads; +static int *bdb_tool_index_threads, bdb_tool_index_tcount; static void *bdb_tool_index_rec; static struct bdb_info *bdb_tool_info; static ldap_pvt_thread_mutex_t bdb_tool_index_mutex; @@ -100,12 +100,12 @@ int bdb_tool_entry_open( ldap_pvt_thread_cond_init( &bdb_tool_index_cond ); bdb_tool_index_threads = ch_malloc( slap_tool_thread_max * sizeof( int )); bdb_tool_index_rec = ch_malloc( bdb->bi_nattrs * sizeof( IndexRec )); + bdb_tool_index_tcount = slap_tool_thread_max - 1; for (i=1; ie_id; bdb_tool_ix_op = op; ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); + /* Wait for all threads to be ready */ + while ( bdb_tool_index_tcount ) { + ldap_pvt_thread_mutex_unlock( &bdb_tool_index_mutex ); + ldap_pvt_thread_yield(); + ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); + } for ( i=1; ie_id, 0 ); @@ -1032,6 +1040,7 @@ bdb_tool_index_task( void *ctx, void *ptr ) free( ptr ); while ( 1 ) { ldap_pvt_thread_mutex_lock( &bdb_tool_index_mutex ); + bdb_tool_index_tcount--; ldap_pvt_thread_cond_wait( &bdb_tool_index_cond, &bdb_tool_index_mutex ); ldap_pvt_thread_mutex_unlock( &bdb_tool_index_mutex );