From c5a53dd525123760f7fcd50a1e16662f9a576d19 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: Sun, 2 Nov 2025 22:12:44 +0300 Subject: [PATCH] mdbx: ending the transaction and return an error in case reader-slot was evicted. --- src/txn-ro.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/txn-ro.c b/src/txn-ro.c index bc863329..8e4d8f3d 100644 --- a/src/txn-ro.c +++ b/src/txn-ro.c @@ -168,6 +168,15 @@ int txn_ro_end(MDBX_txn *txn, unsigned mode) { txn->ro.slot = nullptr; else { eASSERT(env, slot->pid.weak == env->pid); + if (unlikely(slot->pid.weak == 0)) { + txn->flags = MDBX_TXN_RDONLY | MDBX_TXN_FINISHED | MDBX_TXN_OUSTED; + txn->owner = 0; + if (mode & TXN_END_FREE) { + txn->signature = 0; + osal_free(txn); + } + return LOG_IFERR(MDBX_BAD_RSLOT); + } if (likely((txn->flags & MDBX_TXN_FINISHED) == 0)) { if (likely((txn->flags & MDBX_TXN_PARKED) == 0)) { ENSURE(env, txn->txnid >=