mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
Fix 1.461, forgot to release mutex when persistent conn exists
This commit is contained in:
parent
74c3d458b1
commit
ae3fb6acfa
@ -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 );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user