This commit is contained in:
Quanah Gibson-Mount 2008-07-09 22:53:13 +00:00
parent 8696d47b74
commit c68bb6a0e1
2 changed files with 19 additions and 8 deletions

View file

@ -4,6 +4,7 @@ OpenLDAP 2.3.43 Engineering
Fixed liblber ber_get_next length decoding (ITS#5580)
Fixed slapd replog timestamps (ITS#5532)
Fixed slapd socket assert (ITS#5489)
Fixed slapo-syncprov psearch on closed connection (ITS#5401, ITS#5565)
OpenLDAP 2.3.42 Release (2008/05/28)
Fixed libldap file descriptor leak with SELinux (ITS#5507)

View file

@ -1840,12 +1840,10 @@ syncprov_detach_op( Operation *op, syncops *so, slap_overinst *on )
op2->o_do_not_cache = 1;
/* Add op2 to conn so abandon will find us */
ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
op->o_conn->c_n_ops_executing++;
op->o_conn->c_n_ops_completed--;
LDAP_STAILQ_INSERT_TAIL( &op->o_conn->c_ops, op2, o_next );
so->s_flags |= PS_IS_DETACHED;
ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
/* Prevent anyone else from trying to send a result for this op */
op->o_abandon = 1;
@ -1933,15 +1931,27 @@ syncprov_search_response( Operation *op, SlapReply *rs )
/* Detach this Op from frontend control */
ldap_pvt_thread_mutex_lock( &ss->ss_so->s_mutex );
ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
/* Turn off the refreshing flag */
ss->ss_so->s_flags ^= PS_IS_REFRESHING;
/* But not if this connection was closed along the way */
if ( op->o_abandon ) {
ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex );
/* syncprov_ab_cleanup will free this syncop */
return SLAPD_ABANDON;
syncprov_detach_op( op, ss->ss_so, on );
} else {
/* Turn off the refreshing flag */
ss->ss_so->s_flags ^= PS_IS_REFRESHING;
/* If there are queued responses, fire them off */
if ( ss->ss_so->s_res )
syncprov_qstart( ss->ss_so );
syncprov_detach_op( op, ss->ss_so, on );
ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );
/* If there are queued responses, fire them off */
if ( ss->ss_so->s_res )
syncprov_qstart( ss->ss_so );
}
ldap_pvt_thread_mutex_unlock( &ss->ss_so->s_mutex );
return LDAP_SUCCESS;