From: Howard Chu Date: Sun, 22 Mar 2009 02:53:49 +0000 (+0000) Subject: Fix 1.461, forgot to release mutex when persistent conn exists X-Git-Tag: ACLCHECK_0~660 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ae3fb6acfa1f6aab56067e6d8c82fcc5fa669296;p=openldap Fix 1.461, forgot to release mutex when persistent conn exists --- diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index a774836f01..1c838d6a65 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -4605,24 +4605,24 @@ syncrepl_config( ConfigArgs *c ) if ( si->si_re ) { if ( ldap_pvt_thread_mutex_trylock( &si->si_mutex )) { isrunning = 1; - } else if ( si->si_conn ) { - isrunning = 1; - /* If there's a persistent connection, we don't - * know if it's already got a thread queued. - * so defer the free, but reschedule the task. - * If there's a connection thread queued, it - * will cleanup as necessary. If not, then the - * runqueue task will cleanup. - */ - ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); - if ( !ldap_pvt_runqueue_isrunning( &slapd_rq, si->si_re )) { - si->si_re->interval.tv_sec = 0; - ldap_pvt_runqueue_resched( &slapd_rq, si->si_re, 0 ); - si->si_re->interval.tv_sec = si->si_interval; - } - ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); - } else { + if ( si->si_conn ) { + isrunning = 1; + /* If there's a persistent connection, we don't + * know if it's already got a thread queued. + * so defer the free, but reschedule the task. + * If there's a connection thread queued, it + * will cleanup as necessary. If not, then the + * runqueue task will cleanup. + */ + ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); + if ( !ldap_pvt_runqueue_isrunning( &slapd_rq, si->si_re )) { + si->si_re->interval.tv_sec = 0; + ldap_pvt_runqueue_resched( &slapd_rq, si->si_re, 0 ); + si->si_re->interval.tv_sec = si->si_interval; + } + ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex ); + } ldap_pvt_thread_mutex_unlock( &si->si_mutex ); } }