From: Howard Chu Date: Mon, 27 Jun 2011 11:46:43 +0000 (-0700) Subject: ITS#6872 fix test058 breakage from prev patch X-Git-Tag: OPENLDAP_REL_ENG_2_5_0ALPHA~1311^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ebf07016ef0f5070e4d55122172d97574d46ff95;p=thirdparty%2Fopenldap.git ITS#6872 fix test058 breakage from prev patch --- diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index e7bf80a648..7114eb90f8 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -2548,6 +2548,21 @@ syncprov_op_search( Operation *op, SlapReply *rs ) i++; } + if (srs->sr_state.numcsns != numcsns) { + /* consumer doesn't have the right number of CSNs */ + changed = SS_CHANGED; + if ( srs->sr_state.ctxcsn ) { + ber_bvarray_free_x( srs->sr_state.ctxcsn, op->o_tmpmemctx ); + srs->sr_state.ctxcsn = NULL; + } + if ( srs->sr_state.sids ) { + slap_sl_free( srs->sr_state.sids, op->o_tmpmemctx ); + srs->sr_state.sids = NULL; + } + srs->sr_state.numcsns = 0; + goto shortcut; + } + /* Find the smallest CSN which differs from contextCSN */ mincsn.bv_len = 0; maxcsn.bv_len = 0; @@ -2594,28 +2609,24 @@ bailout: } /* If nothing has changed, shortcut it */ - if ( srs->sr_state.numcsns == numcsns ) { - if ( !changed && !dirty ) { - do_present = 0; + if ( !changed && !dirty ) { + do_present = 0; no_change: if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) { - LDAPControl *ctrls[2]; - - ctrls[0] = NULL; - ctrls[1] = NULL; - syncprov_done_ctrl( op, rs, ctrls, 0, 0, - NULL, LDAP_SYNC_REFRESH_DELETES ); - rs->sr_ctrls = ctrls; - rs->sr_err = LDAP_SUCCESS; - send_ldap_result( op, rs ); - rs->sr_ctrls = NULL; - return rs->sr_err; - } - goto shortcut; + LDAPControl *ctrls[2]; + + ctrls[0] = NULL; + ctrls[1] = NULL; + syncprov_done_ctrl( op, rs, ctrls, 0, 0, + NULL, LDAP_SYNC_REFRESH_DELETES ); + rs->sr_ctrls = ctrls; + rs->sr_err = LDAP_SUCCESS; + send_ldap_result( op, rs ); + rs->sr_ctrls = NULL; + return rs->sr_err; } - } else { - /* consumer doesn't have the right number of CSNs */ - changed = SS_CHANGED; + goto shortcut; } + /* Do we have a sessionlog for this search? */ sl=si->si_logs; if ( sl ) {