mdbx: dbi-related minor changes.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2025-07-27 21:47:12 +03:00
parent f0e6db59e2
commit fb5f7f4f83
3 changed files with 7 additions and 6 deletions

View File

@ -143,7 +143,7 @@ int mdbx_dbi_close(MDBX_env *env, MDBX_dbi dbi) {
if (unlikely(dbi < CORE_DBS)) if (unlikely(dbi < CORE_DBS))
return (dbi == MAIN_DBI) ? MDBX_SUCCESS : LOG_IFERR(MDBX_BAD_DBI); 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); return LOG_IFERR(MDBX_BAD_DBI);
rc = osal_fastmutex_acquire(&env->dbi_lock); 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. Таким образом, падение может быть * в basal_txn, а уже после в env->txn. Таким образом, падение может быть
* только при коллизии с завершением вложенной транзакции. * только при коллизии с завершением вложенной транзакции.
* *
* Альтернативно можно попробовать выполнять обновление/put записи в * Альтернативно можно попробовать выполнять обновление/put строки в
* mainDb соответствующей таблице закрываемого хендла. Семантически это * MainDB соответствующей таблице закрываемого хендла. Семантически это
* верный путь, но проблема в текущем API, в котором исторически dbi-хендл * верный путь, но проблема в текущем API, в котором исторически dbi-хендл
* живет и закрывается вне транзакции. Причем проблема не только в том, * живет и закрывается вне транзакции. Причем проблема не только в том,
* что нет указателя на текущую пишущую транзакцию, а в том что * что нет указателя на текущую пишущую транзакцию, а в том что

View File

@ -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; txn->dbi_state[dbi] = (dbi >= CORE_DBS) ? DBI_LINDO | DBI_VALID | DBI_STALE : DBI_LINDO | DBI_VALID;
return MDBX_SUCCESS; return MDBX_SUCCESS;
} }
return MDBX_BAD_DBI; 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); int err = dbi_check(txn, slot);
eASSERT(env, err == MDBX_BAD_DBI); eASSERT(env, err == MDBX_BAD_DBI);
if (err != MDBX_BAD_DBI) if (unlikely(err != MDBX_BAD_DBI))
return MDBX_PROBLEM; return MDBX_PROBLEM;
/* Find the DB info */ /* 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; name.iov_base = clone;
uint8_t dbi_state = DBI_LINDO | DBI_VALID | DBI_FRESH; 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 */ /* MDBX_NOTFOUND and MDBX_CREATE: Create new DB */
tASSERT(txn, rc == MDBX_NOTFOUND); tASSERT(txn, rc == MDBX_NOTFOUND);
body.iov_base = memset(&txn->dbs[slot], 0, body.iov_len = sizeof(tree_t)); body.iov_base = memset(&txn->dbs[slot], 0, body.iov_len = sizeof(tree_t));

View File

@ -179,7 +179,7 @@ int txn_renew(MDBX_txn *txn, unsigned flags) {
txn->n_dbi = CORE_DBS; txn->n_dbi = CORE_DBS;
VALGRIND_MAKE_MEM_UNDEFINED(txn->dbi_sparse, VALGRIND_MAKE_MEM_UNDEFINED(txn->dbi_sparse,
ceil_powerof2(env->max_dbi, CHAR_BIT * sizeof(txn->dbi_sparse[0])) / CHAR_BIT); 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 #else
txn->n_dbi = (env->n_dbi < 8) ? env->n_dbi : 8; txn->n_dbi = (env->n_dbi < 8) ? env->n_dbi : 8;
if (txn->n_dbi > CORE_DBS) if (txn->n_dbi > CORE_DBS)