mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-18 18:18:06 -05:00
ITS#5401
This commit is contained in:
parent
8696d47b74
commit
c68bb6a0e1
2 changed files with 19 additions and 8 deletions
1
CHANGES
1
CHANGES
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue