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))
|
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-хендл
|
||||||
* живет и закрывается вне транзакции. Причем проблема не только в том,
|
* живет и закрывается вне транзакции. Причем проблема не только в том,
|
||||||
* что нет указателя на текущую пишущую транзакцию, а в том что
|
* что нет указателя на текущую пишущую транзакцию, а в том что
|
||||||
|
@ -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));
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user