diff --git a/src/gc-get.c b/src/gc-get.c index 27c47174..4d52a907 100644 --- a/src/gc-get.c +++ b/src/gc-get.c @@ -1096,10 +1096,15 @@ next_gc: txn->cursors[FREE_DBI] = gc; ret.err = cursor_del(gc, 0); txn->cursors[FREE_DBI] = gc->next; - if (unlikely(ret.err != MDBX_SUCCESS)) - goto fail; - rkl = &txn->wr.gc.ready4reuse; - rkl_name = "ready4reuse"; + if (likely(ret.err == MDBX_SUCCESS)) { + rkl = &txn->wr.gc.ready4reuse; + rkl_name = "ready4reuse"; + } else { + VERBOSE("gc-early-clean: err %d, repnl %zu, gc-height %u (%u branch, %u leafs)", ret.err, + MDBX_PNL_GETSIZE(txn->wr.repnl), gc->tree->height, gc->tree->branch_pages, gc->tree->leaf_pages); + if (unlikely(txn->flags & MDBX_TXN_ERROR)) + goto fail; + } } ret.err = rkl_push(rkl, id); TRACE("%" PRIaTXN " len %zu pushed to rkl-%s, err %d", id, gc_len, rkl_name, ret.err); diff --git a/src/page-ops.c b/src/page-ops.c index 3aa869ec..81cba636 100644 --- a/src/page-ops.c +++ b/src/page-ops.c @@ -182,8 +182,11 @@ __hot int page_touch_unmodifable(MDBX_txn *txn, MDBX_cursor *mc, const page_t *c const pgr_t par = gc_alloc_single(mc); rc = par.err; np = par.page; - if (unlikely(rc != MDBX_SUCCESS)) - goto fail; + if (unlikely(rc != MDBX_SUCCESS)) { + if (likely(mc->dbi_state != txn->dbi_state) || (rc != MDBX_MAP_FULL && rc != MDBX_BACKLOG_DEPLETED)) + goto fail; + return rc; + } rc = pnl_append(&txn->wr.retired_pages, mp->pgno); if (unlikely(rc != MDBX_SUCCESS))