]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/syncprov.c
Fix prev commit
[openldap] / servers / slapd / overlays / syncprov.c
index 5eb40f4c00431902e8fa782b5ff2cf3390eabbff..2278ad34ebd284b1e4cce696d0aea16b80313fd9 100644 (file)
@@ -1302,9 +1302,6 @@ syncprov_add_slog( Operation *op, struct berval *csn )
                        sl->sl_mincsn.bv_len = se->se_csn.bv_len;
                        ch_free( se );
                        sl->sl_num--;
-                       if ( !sl->sl_head ) {
-                               sl->sl_tail = NULL;
-                       }
                }
                ldap_pvt_thread_mutex_unlock( &sl->sl_mutex );
        }
@@ -1434,6 +1431,7 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
                        mf.f_av_value = uuids[i];
                        cb.sc_private = NULL;
                        fop.ors_slimit = 1;
+                       frs.sr_nentries = 0;
                        rc = fop.o_bd->be_search( &fop, &frs );
 
                        /* If entry was not found, add to delete list */
@@ -1761,7 +1759,7 @@ syncprov_detach_op( Operation *op, syncops *so, slap_overinst *on )
        op2->ors_filterstr.bv_val = ptr;
        strcpy( ptr, so->s_filterstr.bv_val );
        op2->ors_filterstr.bv_len = so->s_filterstr.bv_len;
-       op2->ors_filter = str2filter( ptr );
+       op2->ors_filter = filter_dup( op->ors_filter, NULL );
        so->s_op = op2;
 
        /* Copy any cached group ACLs individually */
@@ -1783,6 +1781,9 @@ syncprov_detach_op( Operation *op, syncops *so, slap_overinst *on )
        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;
 }
 
 static int
@@ -1901,10 +1902,12 @@ syncprov_op_search( Operation *op, SlapReply *rs )
                /* syncprov_findbase expects to be called as a callback... */
                sc.sc_private = &opc;
                opc.son = on;
+               ldap_pvt_thread_mutex_init( &so.s_mutex );
                cb = op->o_callback;
                op->o_callback = ≻
                rs->sr_err = syncprov_findbase( op, &fc );
                op->o_callback = cb;
+               ldap_pvt_thread_mutex_destroy( &so.s_mutex );
 
                if ( rs->sr_err != LDAP_SUCCESS ) {
                        send_ldap_result( op, rs );