mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-01 20:49:35 -05:00
ITS#10045 Also check for abandon when things have settled
This commit is contained in:
parent
950aa08c31
commit
525b631e37
1 changed files with 36 additions and 3 deletions
|
|
@ -5746,12 +5746,21 @@ config_back_add( Operation *op, SlapReply *rs )
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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 );
|
||||
|
||||
|
|
@ -5820,10 +5829,11 @@ config_back_add( Operation *op, SlapReply *rs )
|
|||
|
||||
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 */
|
||||
|
|
@ -6329,12 +6339,21 @@ config_back_modify( Operation *op, SlapReply *rs )
|
|||
}
|
||||
|
||||
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 );
|
||||
|
||||
|
|
@ -6381,9 +6400,9 @@ config_back_modify( Operation *op, SlapReply *rs )
|
|||
}
|
||||
|
||||
ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
|
||||
out:
|
||||
if ( do_pause )
|
||||
slap_unpause_server();
|
||||
out:
|
||||
if ( num_ctrls ) rs->sr_ctrls = ctrls;
|
||||
send_ldap_result( op, rs );
|
||||
slap_graduate_commit_csn( op );
|
||||
|
|
@ -6541,12 +6560,21 @@ config_back_modrdn( Operation *op, SlapReply *rs )
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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 );
|
||||
|
||||
|
|
@ -6630,9 +6658,9 @@ config_back_modrdn( Operation *op, SlapReply *rs )
|
|||
|
||||
ldap_pvt_thread_rdwr_wunlock( &cfb->cb_rwlock );
|
||||
|
||||
out:
|
||||
if ( dopause )
|
||||
slap_unpause_server();
|
||||
out:
|
||||
if ( num_ctrls ) rs->sr_ctrls = ctrls;
|
||||
send_ldap_result( op, rs );
|
||||
return rs->sr_err;
|
||||
|
|
@ -6694,6 +6722,11 @@ config_back_delete( Operation *op, SlapReply *rs )
|
|||
|
||||
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 ) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue