mirror of
https://gitflic.ru/project/erthink/libmdbx.git
synced 2025-06-29 11:15:59 +00:00
mdbx: устранение вероятности ошибки MDBX_ENODATA
при поиске в GC.
This commit is contained in:
parent
10bf63eb9a
commit
a600c2a7a2
@ -1086,6 +1086,7 @@ next_gc:
|
|||||||
}
|
}
|
||||||
eASSERT(env, pnl_check_allocated(txn->wr.repnl, txn->geo.first_unallocated - MDBX_ENABLE_REFUND));
|
eASSERT(env, pnl_check_allocated(txn->wr.repnl, txn->geo.first_unallocated - MDBX_ENABLE_REFUND));
|
||||||
|
|
||||||
|
eASSERT(env, op == MDBX_PREV || op == MDBX_NEXT);
|
||||||
rkl_t *rkl = &txn->wr.gc.reclaimed;
|
rkl_t *rkl = &txn->wr.gc.reclaimed;
|
||||||
const char *rkl_name = "reclaimed";
|
const char *rkl_name = "reclaimed";
|
||||||
if (mc->dbi_state != txn->dbi_state &&
|
if (mc->dbi_state != txn->dbi_state &&
|
||||||
@ -1095,6 +1096,11 @@ next_gc:
|
|||||||
ret.err = cursor_del(gc, 0);
|
ret.err = cursor_del(gc, 0);
|
||||||
txn->cursors[FREE_DBI] = gc->next;
|
txn->cursors[FREE_DBI] = gc->next;
|
||||||
if (likely(ret.err == MDBX_SUCCESS)) {
|
if (likely(ret.err == MDBX_SUCCESS)) {
|
||||||
|
if (unlikely(txn->dbs[FREE_DBI].items == 0)) {
|
||||||
|
flags &= ~ALLOC_COALESCE;
|
||||||
|
txn->flags |= txn_gc_drained;
|
||||||
|
op = MDBX_FIRST; /* для предотвращения ошибок из-за относительного перемещения курсора */
|
||||||
|
}
|
||||||
rkl = &txn->wr.gc.ready4reuse;
|
rkl = &txn->wr.gc.ready4reuse;
|
||||||
rkl_name = "ready4reuse";
|
rkl_name = "ready4reuse";
|
||||||
} else {
|
} else {
|
||||||
@ -1109,8 +1115,8 @@ next_gc:
|
|||||||
if (unlikely(ret.err != MDBX_SUCCESS))
|
if (unlikely(ret.err != MDBX_SUCCESS))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
eASSERT(env, op == MDBX_PREV || op == MDBX_NEXT);
|
|
||||||
if (flags & ALLOC_COALESCE) {
|
if (flags & ALLOC_COALESCE) {
|
||||||
|
eASSERT(env, op == MDBX_PREV || op == MDBX_NEXT);
|
||||||
if (pnl_size(txn->wr.repnl) < env->maxgc_large1page / 2) {
|
if (pnl_size(txn->wr.repnl) < env->maxgc_large1page / 2) {
|
||||||
TRACE("%s: last id #%" PRIaTXN ", re-len %zu", "coalesce-continue", id, pnl_size(txn->wr.repnl));
|
TRACE("%s: last id #%" PRIaTXN ", re-len %zu", "coalesce-continue", id, pnl_size(txn->wr.repnl));
|
||||||
goto next_gc;
|
goto next_gc;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user