From 270cf399aaad7c30d0f61e4bbad3b46a8490cfa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Sat, 19 Apr 2025 18:12:26 +0300 Subject: [PATCH] =?UTF-8?q?mdbx:=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=20`MDBX=5FTXN=5FHAS=5FCHILD`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/txn-nested.c | 7 ++----- src/txn.c | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/txn-nested.c b/src/txn-nested.c index f5edfb37..c6c728f1 100644 --- a/src/txn-nested.c +++ b/src/txn-nested.c @@ -326,7 +326,6 @@ static void txn_merge(MDBX_txn *const parent, MDBX_txn *const txn, const size_t tASSERT(parent, dpl_check(parent)); } - parent->flags &= ~MDBX_TXN_HAS_CHILD; if (parent->wr.spilled.list) { assert(pnl_check_allocated(parent->wr.spilled.list, (size_t)parent->geo.first_unallocated << 1)); if (MDBX_PNL_GETSIZE(parent->wr.spilled.list)) @@ -459,9 +458,6 @@ void txn_nested_abort(MDBX_txn *nested) { parent->wr.retired_pages = nested->wr.retired_pages; } - parent->wr.dirtylru = nested->wr.dirtylru; - parent->nested = nullptr; - parent->flags &= ~MDBX_TXN_HAS_CHILD; tASSERT(parent, dpl_check(parent)); tASSERT(parent, audit_ex(parent, 0, false) == 0); dpl_release_shadows(nested); @@ -581,9 +577,10 @@ int txn_nested_join(MDBX_txn *txn, struct commit_timestamp *ts) { ts->sync = /* no sync */ ts->write; } txn_merge(parent, txn, parent_retired_len); + tASSERT(parent, parent->flags & MDBX_TXN_HAS_CHILD); + parent->flags -= MDBX_TXN_HAS_CHILD; env->txn = parent; parent->nested = nullptr; - parent->flags &= ~MDBX_TXN_HAS_CHILD; tASSERT(parent, dpl_check(parent)); #if MDBX_ENABLE_REFUND diff --git a/src/txn.c b/src/txn.c index 5d553595..321e9a52 100644 --- a/src/txn.c +++ b/src/txn.c @@ -352,7 +352,10 @@ int txn_end(MDBX_txn *txn, unsigned mode) { tASSERT(txn, pnl_check_allocated(txn->wr.repnl, txn->geo.first_unallocated - MDBX_ENABLE_REFUND)); tASSERT(txn, memcmp(&txn->wr.troika, &parent->wr.troika, sizeof(troika_t)) == 0); tASSERT(txn, mode & TXN_END_FREE); + tASSERT(parent, parent->flags & MDBX_TXN_HAS_CHILD); env->txn = parent; + parent->nested = nullptr; + parent->flags -= MDBX_TXN_HAS_CHILD; const pgno_t nested_now = txn->geo.now, nested_upper = txn->geo.upper; txn_nested_abort(txn);