mdbx: ending the transaction and return an error in case reader-slot was evicted.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2025-11-02 22:12:44 +03:00
parent c07cfd30e1
commit 3bec0dbc6e

View File

@@ -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 >=