X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fmodify.c;h=a50bbea983b57b15b9d422e186f96b8f76b607ba;hb=bc478dee4630a37e5a222b14f36d5d6106a4867b;hp=047f21f3f3accad68e34f865d63ef1c745290756;hpb=fda3d6260e25f1d0b9c035b0d520b2c9d0f22e49;p=openldap diff --git a/servers/slapd/back-bdb/modify.c b/servers/slapd/back-bdb/modify.c index 047f21f3f3..a50bbea983 100644 --- a/servers/slapd/back-bdb/modify.c +++ b/servers/slapd/back-bdb/modify.c @@ -21,7 +21,6 @@ #include #include "back-bdb.h" -#include "external.h" static struct berval scbva[] = { BER_BVC("glue"), @@ -290,7 +289,7 @@ bdb_modify( Operation *op, SlapReply *rs ) Entry *ctxcsn_e; int ctxcsn_added = 0; - Debug( LDAP_DEBUG_ARGS, "bdb_modify: %s\n", + Debug( LDAP_DEBUG_ARGS, LDAP_XSTRING(bdb_modify) ": %s\n", op->o_req_dn.bv_val, 0, 0 ); ctrls[num_ctrls] = NULL; @@ -306,7 +305,7 @@ retry: /* transaction retry */ e = NULL; } Debug(LDAP_DEBUG_TRACE, - "bdb_modify: retrying...\n", 0, 0, 0); + LDAP_XSTRING(bdb_modify) ": retrying...\n", 0, 0, 0); pm_list = LDAP_LIST_FIRST(&op->o_pm_list); while ( pm_list != NULL ) { @@ -335,8 +334,8 @@ retry: /* transaction retry */ rs->sr_text = NULL; if( rs->sr_err != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: txn_begin failed: %s (%d)\n", - db_strerror(rs->sr_err), rs->sr_err, 0 ); + LDAP_XSTRING(bdb_modify) ": txn_begin failed: " + "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); rs->sr_err = LDAP_OTHER; rs->sr_text = "internal error"; goto return_results; @@ -357,7 +356,7 @@ retry: /* transaction retry */ if ( rs->sr_err != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: dn2entry failed (%d)\n", + LDAP_XSTRING(bdb_modify) ": dn2entry failed (%d)\n", rs->sr_err, 0, 0 ); switch( rs->sr_err ) { case DB_LOCK_DEADLOCK: @@ -399,7 +398,7 @@ retry: /* transaction retry */ ber_bvarray_add( &deref, &tmpbv ); } } else { - deref = SLAPD_GLOBAL(default_referral); + deref = default_referral; } rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn, LDAP_SCOPE_DEFAULT ); @@ -408,10 +407,10 @@ retry: /* transaction retry */ rs->sr_err = LDAP_REFERRAL; send_ldap_result( op, rs ); - if ( rs->sr_ref != SLAPD_GLOBAL(default_referral) ) { + if ( rs->sr_ref != default_referral ) { ber_bvarray_free( rs->sr_ref ); } - if ( deref != SLAPD_GLOBAL(default_referral) ) { + if ( deref != default_referral ) { ber_bvarray_free( deref ); } free( (char *)rs->sr_matched ); @@ -426,7 +425,7 @@ retry: /* transaction retry */ rs->sr_ref = get_entry_referrals( op, e ); Debug( LDAP_DEBUG_TRACE, - "bdb_modify: entry is referral\n", + LDAP_XSTRING(bdb_modify) ": entry is referral\n", 0, 0, 0 ); rs->sr_err = LDAP_REFERRAL; @@ -450,9 +449,13 @@ retry: /* transaction retry */ ldap_pvt_thread_rdwr_wlock( &bdb->bi_pslist_rwlock ); LDAP_LIST_FOREACH ( ps_list, &bdb->bi_psearch_list, o_ps_link ) { rc = bdb_psearch(op, rs, ps_list, e, LDAP_PSEARCH_BY_PREMODIFY ); - if ( rc ) { + if ( rc == LDAP_BUSY && op->o_ps_send_wait ) { + ldap_pvt_thread_rdwr_wunlock( &bdb->bi_pslist_rwlock ); + goto retry; + } else if ( rc ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: persistent search failed (%d,%d)\n", + LDAP_XSTRING(bdb_modify) + ": persistent search failed (%d,%d)\n", rc, rs->sr_err, 0 ); } } @@ -468,7 +471,8 @@ retry: /* transaction retry */ &slap_pre_read_bv, preread_ctrl ) ) { Debug( LDAP_DEBUG_TRACE, - "<=- bdb_modify: pre-read failed!\n", 0, 0, 0 ); + "<=- " LDAP_XSTRING(bdb_modify) + ": pre-read failed!\n", 0, 0, 0 ); goto return_results; } } @@ -479,7 +483,8 @@ retry: /* transaction retry */ rs->sr_text = NULL; if( rs->sr_err != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: txn_begin(2) failed: %s (%d)\n", + LDAP_XSTRING(bdb_modify) ": txn_begin(2) failed: " + "%s (%d)\n", db_strerror(rs->sr_err), rs->sr_err, 0 ); rs->sr_err = LDAP_OTHER; rs->sr_text = "internal error"; @@ -492,7 +497,7 @@ retry: /* transaction retry */ if( rs->sr_err != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: modify failed (%d)\n", + LDAP_XSTRING(bdb_modify) ": modify failed (%d)\n", rs->sr_err, 0, 0 ); if ( (rs->sr_err == LDAP_INSUFFICIENT_ACCESS) && opinfo.boi_err ) { rs->sr_err = opinfo.boi_err; @@ -511,8 +516,8 @@ retry: /* transaction retry */ rs->sr_err = bdb_id2entry_update( op->o_bd, lt2, &dummy ); if ( rs->sr_err != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: id2entry update failed (%d)\n", - rs->sr_err, 0, 0 ); + LDAP_XSTRING(bdb_modify) ": id2entry update failed " + "(%d)\n", rs->sr_err, 0, 0 ); switch( rs->sr_err ) { case DB_LOCK_DEADLOCK: case DB_LOCK_NOTGRANTED: @@ -548,7 +553,8 @@ retry: /* transaction retry */ &slap_post_read_bv, postread_ctrl ) ) { Debug( LDAP_DEBUG_TRACE, - "<=- bdb_modify: post-read failed!\n", 0, 0, 0 ); + "<=- " LDAP_XSTRING(bdb_modify) + ": post-read failed!\n", 0, 0, 0 ); goto return_results; } } @@ -583,7 +589,9 @@ retry: /* transaction retry */ rc = bdb_psearch( op, rs, ps_list, e, LDAP_PSEARCH_BY_MODIFY ); if ( rc ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: persistent search failed (%d,%d)\n", + LDAP_XSTRING(bdb_modify) + ": persistent search failed " + "(%d,%d)\n", rc, rs->sr_err, 0 ); } } @@ -593,7 +601,9 @@ retry: /* transaction retry */ e, LDAP_PSEARCH_BY_SCOPEOUT); if ( rc ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: persistent search failed (%d,%d)\n", + LDAP_XSTRING(bdb_modify) + ": persistent search failed " + "(%d,%d)\n", rc, rs->sr_err, 0 ); } LDAP_LIST_REMOVE ( pm_list, ps_link ); @@ -611,7 +621,7 @@ retry: /* transaction retry */ if( rs->sr_err != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_modify: txn_%s failed: %s (%d)\n", + LDAP_XSTRING(bdb_modify) ": txn_%s failed: %s (%d)\n", op->o_noop ? "abort (no-op)" : "commit", db_strerror(rs->sr_err), rs->sr_err ); rs->sr_err = LDAP_OTHER; @@ -621,9 +631,9 @@ retry: /* transaction retry */ } Debug( LDAP_DEBUG_TRACE, - "bdb_modify: updated%s id=%08lx dn=\"%s\"\n", + LDAP_XSTRING(bdb_modify) ": updated%s id=%08lx dn=\"%s\"\n", op->o_noop ? " (no-op)" : "", - e->e_id, e->e_dn ); + dummy.e_id, op->o_req_dn.bv_val ); rs->sr_err = LDAP_SUCCESS; rs->sr_text = NULL; @@ -659,12 +669,12 @@ done: } if( preread_ctrl != NULL ) { - slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, &op->o_tmpmemctx ); - slap_sl_free( *preread_ctrl, &op->o_tmpmemctx ); + slap_sl_free( (*preread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); + slap_sl_free( *preread_ctrl, op->o_tmpmemctx ); } if( postread_ctrl != NULL ) { - slap_sl_free( (*postread_ctrl)->ldctl_value.bv_val, &op->o_tmpmemctx ); - slap_sl_free( *postread_ctrl, &op->o_tmpmemctx ); + slap_sl_free( (*postread_ctrl)->ldctl_value.bv_val, op->o_tmpmemctx ); + slap_sl_free( *postread_ctrl, op->o_tmpmemctx ); } return rs->sr_err; }