From: Ondřej Kuzník Date: Fri, 21 Jun 2019 10:19:38 +0000 (+0200) Subject: ITS#7996 Use a separate mutex in ldap_int_initialize X-Git-Tag: OPENLDAP_REL_ENG_2_5_0ALPHA~67^2~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b2f4cacd4783cfe49370accc712863f9537f9924;p=thirdparty%2Fopenldap.git ITS#7996 Use a separate mutex in ldap_int_initialize --- diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c index c8f6166823..1d2a38fdb0 100644 --- a/libraries/libldap/init.c +++ b/libraries/libldap/init.c @@ -634,14 +634,14 @@ int ldap_int_stackguard; void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl ) { #ifdef LDAP_R_COMPILE - LDAP_PVT_MUTEX_FIRSTCREATE( gopts->ldo_mutex ); -#endif + static ldap_pvt_thread_mutex_t init_mutex; + LDAP_PVT_MUTEX_FIRSTCREATE( init_mutex ); - LDAP_MUTEX_LOCK( &gopts->ldo_mutex ); + LDAP_MUTEX_LOCK( &init_mutex ); +#endif if ( gopts->ldo_valid == LDAP_INITIALIZED ) { /* someone else got here first */ - LDAP_MUTEX_UNLOCK( &gopts->ldo_mutex ); - return; + goto done; } ldap_int_error_init(); @@ -769,6 +769,8 @@ void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl ) openldap_ldap_init_w_env(gopts, NULL); -done: - LDAP_MUTEX_UNLOCK( &gopts->ldo_mutex ); +done:; +#ifdef LDAP_R_COMPILE + LDAP_MUTEX_UNLOCK( &init_mutex ); +#endif }