X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fmodify.c;h=4854b9e40e6452a324916817ccaa379151d71807;hb=b371199b68eef73ff69dc212cb874f9baadc9679;hp=eac99229296bb3e7b0e3c0d55dcb412f79e3a083;hpb=e93e318629050cb7fc89e16fd5d6c1360681ff4f;p=openldap diff --git a/servers/slapd/back-bdb/modify.c b/servers/slapd/back-bdb/modify.c index eac9922929..4854b9e40e 100644 --- a/servers/slapd/back-bdb/modify.c +++ b/servers/slapd/back-bdb/modify.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2000-2005 The OpenLDAP Foundation. + * Copyright 2000-2006 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -298,8 +298,7 @@ bdb_modify( Operation *op, SlapReply *rs ) ctrls[num_ctrls] = NULL; - if ( !SLAP_SHADOW( op->o_bd )) - slap_mods_opattrs( op, &op->orm_modlist, 1 ); + slap_mods_opattrs( op, &op->orm_modlist, 1 ); if( 0 ) { retry: /* transaction retry */ @@ -327,7 +326,6 @@ retry: /* transaction retry */ rs->sr_err = SLAPD_ABANDON; goto return_results; } - ldap_pvt_thread_yield(); bdb_trans_backoff( ++num_retries ); } @@ -591,16 +589,15 @@ return_results: attrs_free( dummy.e_attrs ); } send_ldap_result( op, rs ); - if ( !SLAP_SHADOW( op->o_bd )) - slap_graduate_commit_csn( op ); if( rs->sr_err == LDAP_SUCCESS && bdb->bi_txn_cp ) { - ldap_pvt_thread_yield(); TXN_CHECKPOINT( bdb->bi_dbenv, bdb->bi_txn_cp_kbyte, bdb->bi_txn_cp_min, 0 ); } done: + slap_graduate_commit_csn( op ); + if( ltid != NULL ) { TXN_ABORT( ltid ); } @@ -610,11 +607,11 @@ done: bdb_unlocked_cache_return_entry_w (&bdb->bi_cache, e); } - if( preread_ctrl != NULL ) { + if( preread_ctrl != NULL && (*preread_ctrl) != NULL ) { slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); slap_sl_free( *preread_ctrl, op->o_tmpmemctx ); } - if( postread_ctrl != NULL ) { + if( postread_ctrl != NULL && (*postread_ctrl) != NULL ) { slap_sl_free( (*postread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); slap_sl_free( *postread_ctrl, op->o_tmpmemctx ); }