mirror of
https://github.com/isar/libmdbx.git
synced 2025-10-18 22:09:03 +08:00
mdbx: add internal txn_basis_snapshot()
.
This commit is contained in:
@@ -191,7 +191,7 @@ int mdbx_is_dirty(const MDBX_txn *txn, const void *ptr) {
|
|||||||
* not to the beginning of a data. */
|
* not to the beginning of a data. */
|
||||||
return LOG_IFERR(MDBX_EINVAL);
|
return LOG_IFERR(MDBX_EINVAL);
|
||||||
}
|
}
|
||||||
return ((txn->flags & MDBX_TXN_RDONLY) || !is_modifable(txn, page)) ? MDBX_RESULT_FALSE : MDBX_RESULT_TRUE;
|
return (page->txnid > txn_basis_snapshot(txn)) ? MDBX_RESULT_TRUE : MDBX_RESULT_FALSE;
|
||||||
}
|
}
|
||||||
if ((size_t)offset < env->dxb_mmap.limit) {
|
if ((size_t)offset < env->dxb_mmap.limit) {
|
||||||
/* Указатель адресует что-то в пределах mmap, но за границей
|
/* Указатель адресует что-то в пределах mmap, но за границей
|
||||||
|
@@ -503,6 +503,14 @@ static inline int check_txn_rw(const MDBX_txn *txn, int bad_bits) {
|
|||||||
return check_txn(txn, (bad_bits | MDBX_TXN_RDONLY) & ~MDBX_TXN_PARKED);
|
return check_txn(txn, (bad_bits | MDBX_TXN_RDONLY) & ~MDBX_TXN_PARKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MDBX_NOTHROW_CONST_FUNCTION static inline txnid_t txn_basis_snapshot(const MDBX_txn *txn) {
|
||||||
|
STATIC_ASSERT((MDBX_TXN_RDONLY >> 17) == 1);
|
||||||
|
STATIC_ASSERT((xMDBX_TXNID_STEP >> (xMDBX_TXNID_STEP == 2)) == 1);
|
||||||
|
const txnid_t committed_txnid = txn->txnid + (xMDBX_TXNID_STEP >> (xMDBX_TXNID_STEP == 2)) - ((txn->flags >> 17) & 1);
|
||||||
|
tASSERT(txn, committed_txnid == ((txn->flags & MDBX_TXN_RDONLY) ? txn->txnid : txn->txnid - xMDBX_TXNID_STEP));
|
||||||
|
return committed_txnid;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
MDBX_INTERNAL void mincore_clean_cache(const MDBX_env *const env);
|
MDBX_INTERNAL void mincore_clean_cache(const MDBX_env *const env);
|
||||||
|
Reference in New Issue
Block a user