diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h
index b0c2bd93614cfe0bdbe4c161d74212f5a16be2c6..897569b59980b3453a286cde634f0cf9015dc579 100644
--- a/libraries/libldap/ldap-int.h
+++ b/libraries/libldap/ldap-int.h
@@ -315,9 +315,7 @@ struct ldap {
 #define LDAP_VALID(ld)	( (ld)->ld_valid == LDAP_VALID_SESSION )
 
 #ifdef LDAP_R_COMPILE
-#ifdef HAVE_RES_QUERY
 LDAP_V ( ldap_pvt_thread_mutex_t ) ldap_int_resolv_mutex;
-#endif
 
 #ifdef HAVE_CYRUS_SASL
 LDAP_V( ldap_pvt_thread_mutex_t ) ldap_int_sasl_mutex;
diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c
index 5e4391178a735f74eecbd35d969ee034c4fe966d..4854e5c75e640c4ea7ef530d8514165cb91e702e 100644
--- a/libraries/libldap/os-ip.c
+++ b/libraries/libldap/os-ip.c
@@ -357,7 +357,19 @@ ldap_connect_to_host(LDAP *ld, Sockbuf *sb,
 		hints.ai_socktype = socktype;
 
 		snprintf(serv, sizeof serv, "%d", port );
-		if ( ( err = getaddrinfo(host, serv, &hints, &res) ) ) {
+
+#ifdef LDAP_R_COMPILE
+		/* most getaddrinfo(3) use non-threadsafe resolver libraries */
+		ldap_pvt_thread_mutex_lock(&ldap_int_resolv_mutex);
+#endif
+
+		err = getaddrinfo( host, serv, &hints, &res );
+
+#ifdef LDAP_R_COMPILE
+		ldap_pvt_thread_mutex_unlock(&ldap_int_resolv_mutex);
+#endif
+
+		if ( err != 0 ) {
 			osip_debug(ld, "ldap_connect_to_host: getaddrinfo failed: %s\n",
 				AC_GAI_STRERROR(err), 0, 0);
 			return -1;
diff --git a/libraries/libldap/util-int.c b/libraries/libldap/util-int.c
index 4bf3f6fa71e6833f56f0060737fed7dfdbbf8b0b..649394741eb53ce14cfb7c729062ff4894793596 100644
--- a/libraries/libldap/util-int.c
+++ b/libraries/libldap/util-int.c
@@ -59,9 +59,6 @@
 # ifndef USE_CTIME_R
 	static ldap_pvt_thread_mutex_t ldap_int_ctime_mutex;
 # endif
-# if !defined( HAVE_GETHOSTBYNAME_R ) || !defined( HAVE_GETHOSTBYADDR_R )
-	static ldap_pvt_thread_mutex_t ldap_int_gethostby_mutex;
-# endif
 # ifdef HAVE_RES_QUERY
 	ldap_pvt_thread_mutex_t ldap_int_resolv_mutex;
 # endif
@@ -148,7 +145,7 @@ int ldap_pvt_gethostbyname_a(
 	int	retval;
 	*buf = NULL;
 	
-	ldap_pvt_thread_mutex_lock( &ldap_int_gethostby_mutex );
+	ldap_pvt_thread_mutex_lock( &ldap_int_resolv_mutex );
 	
 	he = gethostbyname( name );
 	
@@ -163,7 +160,7 @@ int ldap_pvt_gethostbyname_a(
 		retval = 0;
 	}
 	
-	ldap_pvt_thread_mutex_unlock( &ldap_int_gethostby_mutex );
+	ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex );
 	
 	return retval;
 #else	
@@ -229,7 +226,7 @@ int ldap_pvt_gethostbyaddr_a(
 	int	retval;
 	*buf = NULL;   
 	
-	ldap_pvt_thread_mutex_lock( &ldap_int_gethostby_mutex );
+	ldap_pvt_thread_mutex_lock( &ldap_int_resolv_mutex );
 	
 	he = gethostbyaddr( addr, len, type );
 	
@@ -244,7 +241,7 @@ int ldap_pvt_gethostbyaddr_a(
 		retval = 0;
 	}
 	
-	ldap_pvt_thread_mutex_unlock( &ldap_int_gethostby_mutex );
+	ldap_pvt_thread_mutex_unlock( &ldap_int_resolv_mutex );
 	
 	return retval;   
 #else /* gethostbyaddr() */
@@ -274,10 +271,6 @@ void ldap_int_utils_init( void )
 	ldap_pvt_thread_mutex_init( &ldap_int_ctime_mutex );
 #endif
 
-#if !defined( HAVE_GETHOSTBYNAME_R ) || !defined( HAVE_GETHOSTBYADDR_R )
-	ldap_pvt_thread_mutex_init( &ldap_int_gethostby_mutex );
-#endif
-
 #ifdef HAVE_RES_QUERY
 	ldap_pvt_thread_mutex_init( &ldap_int_resolv_mutex );
 #endif