X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fdelete.c;h=a469fb1265ed84f0c5fea9b7a2c3b42af47c43e2;hb=6df9b5459294bcc9adf27f048508d43eea58a203;hp=1e38499fdfedf0bcb87034978320c81f26874d8b;hpb=6bac96b0bd845f5445869531968d14529480f1e5;p=openldap diff --git a/servers/slapd/back-bdb/delete.c b/servers/slapd/back-bdb/delete.c index 1e38499fdf..a469fb1265 100644 --- a/servers/slapd/back-bdb/delete.c +++ b/servers/slapd/back-bdb/delete.c @@ -47,7 +47,7 @@ retry: /* transaction retry */ } Debug( LDAP_DEBUG_TRACE, "==> bdb_delete: retrying...\n", 0, 0, 0 ); - rc = txn_abort( ltid ); + rc = TXN_ABORT( ltid ); ltid = NULL; op->o_private = NULL; if( rc != 0 ) { @@ -58,23 +58,21 @@ retry: /* transaction retry */ ldap_pvt_thread_yield(); } - if( bdb->bi_txn ) { - /* begin transaction */ - rc = txn_begin( bdb->bi_dbenv, NULL, <id, - bdb->bi_db_opflags ); - text = NULL; - if( rc != 0 ) { - Debug( LDAP_DEBUG_TRACE, - "bdb_delete: txn_begin failed: %s (%d)\n", - db_strerror(rc), rc, 0 ); - rc = LDAP_OTHER; - text = "internal error"; - goto return_results; - } + /* begin transaction */ + rc = TXN_BEGIN( bdb->bi_dbenv, NULL, <id, + bdb->bi_db_opflags ); + text = NULL; + if( rc != 0 ) { + Debug( LDAP_DEBUG_TRACE, + "bdb_delete: txn_begin failed: %s (%d)\n", + db_strerror(rc), rc, 0 ); + rc = LDAP_OTHER; + text = "internal error"; + goto return_results; + } #if 0 - lockid = TXN_ID( ltid ); + lockid = TXN_ID( ltid ); #endif - } opinfo.boi_bdb = be; opinfo.boi_txn = ltid; @@ -235,8 +233,7 @@ retry: /* transaction retry */ } if ( !manageDSAit && is_entry_referral( e ) ) { - /* parent is a referral, don't allow add */ - /* parent is an alias, don't allow add */ + /* entry is a referral, don't allow delete */ BerVarray refs = get_entry_referrals( be, conn, op, e ); @@ -334,30 +331,33 @@ retry: /* transaction retry */ ldap_pvt_thread_mutex_unlock( &bdb->bi_lastid_mutex ); #endif - if( bdb->bi_txn ) { - rc = txn_commit( ltid, 0 ); + if( op->o_noop ) { + rc = TXN_ABORT( ltid ); + } else { + rc = TXN_COMMIT( ltid, 0 ); } ltid = NULL; op->o_private = NULL; if( rc != 0 ) { Debug( LDAP_DEBUG_TRACE, - "bdb_delete: txn_commit failed: %s (%d)\n", - db_strerror(rc), rc, 0 ); + "bdb_delete: txn_%s failed: %s (%d)\n", + op->o_noop ? "abort (no-op)" : "commit", + db_strerror(rc), rc ); rc = LDAP_OTHER; text = "commit failed"; } else { Debug( LDAP_DEBUG_TRACE, - "bdb_delete: deleted id=%08lx dn=\"%s\"\n", - e->e_id, e->e_dn, 0 ); + "bdb_delete: deleted%s id=%08lx dn=\"%s\"\n", + op->o_noop ? " (no-op)" : "", + e->e_id, e->e_dn ); rc = LDAP_SUCCESS; text = NULL; } return_results: - send_ldap_result( conn, op, LDAP_SUCCESS, - NULL, text, NULL, NULL ); + send_ldap_result( conn, op, rc, NULL, text, NULL, NULL ); if(rc == LDAP_SUCCESS && bdb->bi_txn_cp ) { ldap_pvt_thread_yield(); @@ -372,7 +372,7 @@ done: } if( ltid != NULL ) { - txn_abort( ltid ); + TXN_ABORT( ltid ); op->o_private = NULL; }