/* Queue a persistent search response */
static int
-syncprov_qresp( opcookie *opc, syncops *so, int mode )
+syncprov_qresp( opcookie *opc, syncops *so, int mode, int immed )
{
syncres *sr;
resinfo *ri;
ri->ri_csn.bv_val = NULL;
}
}
- ri->ri_list = &opc->ssres;
+ if (immed)
+ ri->ri_list = NULL;
+ else
+ ri->ri_list = &opc->ssres;
ri->ri_e = opc->se;
ri->ri_csn.bv_len = csn.bv_len;
ri->ri_isref = opc->sreference;
} else {
/* if found send UPDATE else send ADD */
syncprov_qresp( opc, ss,
- found ? LDAP_SYNC_MODIFY : LDAP_SYNC_ADD );
+ found ? LDAP_SYNC_MODIFY : LDAP_SYNC_ADD, 0 );
}
} else if ( !saveit && found ) {
/* send DELETE */
- syncprov_qresp( opc, ss, LDAP_SYNC_DELETE );
+ syncprov_qresp( opc, ss, LDAP_SYNC_DELETE, 0 );
} else if ( !saveit ) {
- syncprov_qresp( opc, ss, LDAP_SYNC_NEW_COOKIE );
+ syncprov_qresp( opc, ss, LDAP_SYNC_NEW_COOKIE, 0 );
}
if ( !saveit && found ) {
/* Decrement s_inuse, was incremented when called
* the originating server may be configured to store
* their csn values in different entries.
*/
- syncprov_qresp( opc, ss, LDAP_SYNC_NEW_COOKIE );
+ syncprov_qresp( opc, ss, LDAP_SYNC_NEW_COOKIE, 0 );
}
ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
}
for ( sm = opc->smatches; sm; sm=sm->sm_next ) {
if ( sm->sm_op->s_op->o_abandon )
continue;
- syncprov_qresp( opc, sm->sm_op, LDAP_SYNC_DELETE );
- if ( opc->ssres.s_info )
- free_resinfo( &opc->ssres );
+ syncprov_qresp( opc, sm->sm_op, LDAP_SYNC_DELETE, 1 );
}
break;
}