Fix CONFIG_DELETE crash

Closing a connection can abandon its ops without going thru the threadpool,
so make sure to lock the si_ops_mutex before walking the list.
This commit is contained in:
Howard Chu 2013-11-05 12:59:56 -08:00
parent a12bedc2d8
commit 6711876a35

View file

@ -3170,6 +3170,7 @@ syncprov_db_close(
#ifdef SLAP_CONFIG_DELETE
if ( !slapd_shutdown ) {
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
for ( so=si->si_ops, sonext=so; so; so=sonext ) {
SlapReply rs = {REP_RESULT};
rs.sr_err = LDAP_UNAVAILABLE;
@ -3178,6 +3179,7 @@ syncprov_db_close(
syncprov_drop_psearch( so, 0);
}
si->si_ops=NULL;
ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
}
overlay_unregister_control( be, LDAP_CONTROL_SYNC );
#endif /* SLAP_CONFIG_DELETE */