]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/syncprov.c
Mroe abandon checks for ITS#3671
[openldap] / servers / slapd / overlays / syncprov.c
index f184dd2815c7e57e2159013a32ba751573fb7380..9b5fba66a08814fa8551c11aebe64658ce56a0b6 100644 (file)
@@ -708,7 +708,6 @@ syncprov_qplay( Operation *op, slap_overinst *on, syncops *so )
        opc.son = on;
        op->o_bd->bd_info = (BackendInfo *)on->on_info;
        for (sr = so->s_res; sr; sr=srnext) {
-               int rc;
                srnext = sr->s_next;
                opc.sdn = sr->s_dn;
                opc.sndn = sr->s_ndn;
@@ -757,6 +756,9 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, Entry **e, int mod
        Operation sop = *so->s_op;
        Opheader ohdr;
 
+       if ( so->s_op->o_abandon )
+               return SLAPD_ABANDON;
+
        ohdr = *sop.o_hdr;
        sop.o_hdr = &ohdr;
        sop.o_tmpmemctx = op->o_tmpmemctx;
@@ -842,9 +844,11 @@ syncprov_sendresp( Operation *op, opcookie *opc, syncops *so, Entry **e, int mod
        op->o_private = sop.o_private;
        rs.sr_ctrls = NULL;
        /* Check queue again here; if we were hanging in a send and eventually
-        * recovered, there may be more to send now.
+        * recovered, there may be more to send now. But don't check if the
+        * original psearch has been abandoned.
         */
-       if ( rs.sr_err == LDAP_SUCCESS && queue && so->s_res ) {
+       if ( !so->s_op->o_abandon && rs.sr_err == LDAP_SUCCESS && queue
+               && so->s_res ) {
                ldap_pvt_thread_mutex_lock( &so->s_mutex );
                rs.sr_err = syncprov_qplay( &sop, on, so );
                ldap_pvt_thread_mutex_unlock( &so->s_mutex );