From 877faea723ecc5721291b0b2f53e34f7921e0f7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= <ondra@mistotebe.net>
Date: Fri, 21 Jun 2019 12:19:38 +0200
Subject: [PATCH] ITS#7996 Use a separate mutex in ldap_int_initialize

---
 libraries/libldap/init.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c
index e08e5d06db..7582485226 100644
--- a/libraries/libldap/init.c
+++ b/libraries/libldap/init.c
@@ -589,14 +589,14 @@ char * ldap_int_hostname = NULL;
 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();
@@ -718,6 +718,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
 }
-- 
GitLab