}
}
+ /*
+ * ITS#10045 Pre-check for abandon but be willing to handle that the
+ * operation might be abandoned while waiting for the server to pause.
+ */
if ( op->o_abandon ) {
rs->sr_err = SLAPD_ABANDON;
+ dopause = 0;
goto out;
}
if ( slap_pause_server() < 0 )
dopause = 0;
+ if ( op->o_abandon ) {
+ rs->sr_err = SLAPD_ABANDON;
+ goto out;
+ }
ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
out2:;
ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
+
+out:;
if ( dopause )
slap_unpause_server();
-out:;
{ int repl = op->o_dont_replicate;
if ( rs->sr_err == LDAP_COMPARE_TRUE ) {
rs->sr_text = NULL; /* Set after config_add_internal */
slap_mods_opattrs( op, &op->orm_modlist, 1 );
if ( do_pause ) {
+ /*
+ * ITS#10045 Pre-check for abandon but be willing to handle that the
+ * operation might be abandoned while waiting for the server to pause.
+ */
if ( op->o_abandon ) {
rs->sr_err = SLAPD_ABANDON;
+ do_pause = 0;
goto out;
}
if ( slap_pause_server() < 0 )
do_pause = 0;
+ if ( op->o_abandon ) {
+ rs->sr_err = SLAPD_ABANDON;
+ goto out;
+ }
}
ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
}
ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
+out:
if ( do_pause )
slap_unpause_server();
-out:
send_ldap_result( op, rs );
slap_graduate_commit_csn( op );
return rs->sr_err;
goto out;
}
+ /*
+ * ITS#10045 Pre-check for abandon but be willing to handle that the
+ * operation might be abandoned while waiting for the server to pause.
+ */
if ( op->o_abandon ) {
rs->sr_err = SLAPD_ABANDON;
+ dopause = 0;
goto out;
}
if ( slap_pause_server() < 0 )
dopause = 0;
+ if ( op->o_abandon ) {
+ rs->sr_err = SLAPD_ABANDON;
+ goto out;
+ }
ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
+out:
if ( dopause )
slap_unpause_server();
-out:
send_ldap_result( op, rs );
return rs->sr_err;
}
ldap_pvt_thread_rdwr_wlock( &cfb->cb_rwlock );
+ if ( op->o_abandon ) {
+ rs->sr_err = SLAPD_ABANDON;
+ goto out2;
+ }
+
if ( ce->ce_type == Cft_Overlay ){
overlay_remove( ce->ce_be, (slap_overinst *)ce->ce_bi, op );
} else if ( ce->ce_type == Cft_Misc ) {