From: Quanah Gibson-Mount Date: Thu, 1 May 2008 23:25:42 +0000 (+0000) Subject: Fix potential deadlock X-Git-Tag: OPENLDAP_REL_ENG_2_4_9~13 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=f1f83aa2ba9499ba83c7ce643e0a29aa7656e837;p=openldap Fix potential deadlock --- diff --git a/servers/slapd/back-monitor/cache.c b/servers/slapd/back-monitor/cache.c index 3de1ce279a..339e2bb4a8 100644 --- a/servers/slapd/back-monitor/cache.c +++ b/servers/slapd/back-monitor/cache.c @@ -154,13 +154,18 @@ monitor_cache_get( *ep = NULL; tmp_mc.mc_ndn = *ndn; +retry:; ldap_pvt_thread_mutex_lock( &mi->mi_cache_mutex ); mc = ( monitor_cache_t * )avl_find( mi->mi_cache, ( caddr_t )&tmp_mc, monitor_cache_cmp ); if ( mc != NULL ) { /* entry is returned with mutex locked */ - monitor_cache_lock( mc->mc_e ); + if ( monitor_cache_trylock( mc->mc_e ) ) { + ldap_pvt_thread_mutex_unlock( &mi->mi_cache_mutex ); + ldap_pvt_thread_yield(); + goto retry; + } *ep = mc->mc_e; }