mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-02 22:54:44 +08:00
mdbx: dbi-related minor changes.
This commit is contained in:
parent
f0e6db59e2
commit
fb5f7f4f83
@ -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-хендл
|
||||
* живет и закрывается вне транзакции. Причем проблема не только в том,
|
||||
* что нет указателя на текущую пишущую транзакцию, а в том что
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user