From fb5f7f4f83d37e06f222daec2c550162184f571e 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, 27 Jul 2025 21:47:12 +0300 Subject: [PATCH] mdbx: dbi-related minor changes. --- src/api-dbi.c | 6 +++--- src/dbi.c | 5 +++-- src/txn.c | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/api-dbi.c b/src/api-dbi.c index e7f6f27d..66f08c4a 100644 --- a/src/api-dbi.c +++ b/src/api-dbi.c @@ -143,7 +143,7 @@ int mdbx_dbi_close(MDBX_env *env, MDBX_dbi dbi) { if (unlikely(dbi < CORE_DBS)) return (dbi == MAIN_DBI) ? MDBX_SUCCESS : LOG_IFERR(MDBX_BAD_DBI); - if (unlikely(dbi >= env->max_dbi)) + if (unlikely(dbi >= env->n_dbi)) return LOG_IFERR(MDBX_BAD_DBI); rc = osal_fastmutex_acquire(&env->dbi_lock); @@ -167,8 +167,8 @@ int mdbx_dbi_close(MDBX_env *env, MDBX_dbi dbi) { * в basal_txn, а уже после в env->txn. Таким образом, падение может быть * только при коллизии с завершением вложенной транзакции. * - * Альтернативно можно попробовать выполнять обновление/put записи в - * mainDb соответствующей таблице закрываемого хендла. Семантически это + * Альтернативно можно попробовать выполнять обновление/put строки в + * MainDB соответствующей таблице закрываемого хендла. Семантически это * верный путь, но проблема в текущем API, в котором исторически dbi-хендл * живет и закрывается вне транзакции. Причем проблема не только в том, * что нет указателя на текущую пишущую транзакцию, а в том что diff --git a/src/dbi.c b/src/dbi.c index 46f42cd8..f5390e8d 100644 --- a/src/dbi.c +++ b/src/dbi.c @@ -127,6 +127,7 @@ __noinline int dbi_import(MDBX_txn *txn, const size_t dbi) { txn->dbi_state[dbi] = (dbi >= CORE_DBS) ? DBI_LINDO | DBI_VALID | DBI_STALE : DBI_LINDO | DBI_VALID; return MDBX_SUCCESS; } + return MDBX_BAD_DBI; } @@ -415,7 +416,7 @@ static int dbi_open_locked(MDBX_txn *txn, unsigned user_flags, MDBX_dbi *dbi, MD int err = dbi_check(txn, slot); eASSERT(env, err == MDBX_BAD_DBI); - if (err != MDBX_BAD_DBI) + if (unlikely(err != MDBX_BAD_DBI)) return MDBX_PROBLEM; /* Find the DB info */ @@ -448,7 +449,7 @@ static int dbi_open_locked(MDBX_txn *txn, unsigned user_flags, MDBX_dbi *dbi, MD name.iov_base = clone; uint8_t dbi_state = DBI_LINDO | DBI_VALID | DBI_FRESH; - if (unlikely(rc)) { + if (unlikely(rc != MDBX_SUCCESS)) { /* MDBX_NOTFOUND and MDBX_CREATE: Create new DB */ tASSERT(txn, rc == MDBX_NOTFOUND); body.iov_base = memset(&txn->dbs[slot], 0, body.iov_len = sizeof(tree_t)); diff --git a/src/txn.c b/src/txn.c index 8031a9c3..b2657832 100644 --- a/src/txn.c +++ b/src/txn.c @@ -179,7 +179,7 @@ int txn_renew(MDBX_txn *txn, unsigned flags) { txn->n_dbi = CORE_DBS; VALGRIND_MAKE_MEM_UNDEFINED(txn->dbi_sparse, ceil_powerof2(env->max_dbi, CHAR_BIT * sizeof(txn->dbi_sparse[0])) / CHAR_BIT); - txn->dbi_sparse[0] = (1 << CORE_DBS) - 1; + txn->dbi_sparse[0] = (1u << CORE_DBS) - 1; #else txn->n_dbi = (env->n_dbi < 8) ? env->n_dbi : 8; if (txn->n_dbi > CORE_DBS)