mirror of
https://github.com/isar/libmdbx.git
synced 2025-07-18 15:04:44 +08:00
mdbx-windows: исправление assert-проверок внутри txn_lock()
/txn_unlock()
.
This commit is contained in:
parent
8fba09ceb6
commit
2a41db6b67
@ -837,7 +837,7 @@ int lck_txn_lock(MDBX_env *env, bool dont_wait) {
|
|||||||
void lck_txn_unlock(MDBX_env *env) {
|
void lck_txn_unlock(MDBX_env *env) {
|
||||||
TRACE("%s", ">>");
|
TRACE("%s", ">>");
|
||||||
if (env->basal_txn) {
|
if (env->basal_txn) {
|
||||||
eASSERT(env, !env->basal_txn || env->basal_txn->owner == osal_thread_self());
|
eASSERT(env, env->basal_txn->owner == osal_thread_self());
|
||||||
env->basal_txn->owner = 0;
|
env->basal_txn->owner = 0;
|
||||||
}
|
}
|
||||||
int err = osal_ipclock_unlock(env, &env->lck->wrt_lock);
|
int err = osal_ipclock_unlock(env, &env->lck->wrt_lock);
|
||||||
|
@ -87,7 +87,7 @@ int lck_txn_lock(MDBX_env *env, bool dontwait) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eASSERT(env, !env->basal_txn->owner);
|
eASSERT(env, !env->basal_txn || !env->basal_txn->owner);
|
||||||
if (env->flags & MDBX_EXCLUSIVE)
|
if (env->flags & MDBX_EXCLUSIVE)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
@ -104,10 +104,11 @@ int lck_txn_lock(MDBX_env *env, bool dontwait) {
|
|||||||
}
|
}
|
||||||
if (rc == MDBX_SUCCESS) {
|
if (rc == MDBX_SUCCESS) {
|
||||||
done:
|
done:
|
||||||
|
if (env->basal_txn)
|
||||||
|
env->basal_txn->owner = osal_thread_self();
|
||||||
/* Zap: Failing to release lock 'env->windowsbug_lock'
|
/* Zap: Failing to release lock 'env->windowsbug_lock'
|
||||||
* in function 'mdbx_txn_lock' */
|
* in function 'mdbx_txn_lock' */
|
||||||
MDBX_SUPPRESS_GOOFY_MSVC_ANALYZER(26115);
|
MDBX_SUPPRESS_GOOFY_MSVC_ANALYZER(26115);
|
||||||
env->basal_txn->owner = osal_thread_self();
|
|
||||||
return MDBX_SUCCESS;
|
return MDBX_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,13 +117,14 @@ int lck_txn_lock(MDBX_env *env, bool dontwait) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void lck_txn_unlock(MDBX_env *env) {
|
void lck_txn_unlock(MDBX_env *env) {
|
||||||
eASSERT(env, env->basal_txn->owner == osal_thread_self());
|
eASSERT(env, !env->basal_txn || env->basal_txn->owner == osal_thread_self());
|
||||||
if ((env->flags & MDBX_EXCLUSIVE) == 0) {
|
if ((env->flags & MDBX_EXCLUSIVE) == 0) {
|
||||||
const HANDLE fd4data = env->ioring.overlapped_fd ? env->ioring.overlapped_fd : env->lazy_fd;
|
const HANDLE fd4data = env->ioring.overlapped_fd ? env->ioring.overlapped_fd : env->lazy_fd;
|
||||||
int err = funlock(fd4data, DXB_BODY);
|
int err = funlock(fd4data, DXB_BODY);
|
||||||
if (err != MDBX_SUCCESS)
|
if (err != MDBX_SUCCESS)
|
||||||
mdbx_panic("%s failed: err %u", __func__, err);
|
mdbx_panic("%s failed: err %u", __func__, err);
|
||||||
}
|
}
|
||||||
|
if (env->basal_txn)
|
||||||
env->basal_txn->owner = 0;
|
env->basal_txn->owner = 0;
|
||||||
LeaveCriticalSection(&env->windowsbug_lock);
|
LeaveCriticalSection(&env->windowsbug_lock);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user