mirror of
https://github.com/isar/libmdbx.git
synced 2025-08-20 20:09:28 +08:00
mdbx-windows: handling EXCEPTION_POSSIBLE_DEADLOCK
.
Change-Id: If42c7833e9c4e02fef25634e69c0bd2e926686c1
This commit is contained in:
@@ -144,7 +144,15 @@ int mdbx_txn_lock(MDBX_env *env, bool dontwait) {
|
||||
if (!TryEnterCriticalSection(&env->me_windowsbug_lock))
|
||||
return MDBX_BUSY;
|
||||
} else {
|
||||
EnterCriticalSection(&env->me_windowsbug_lock);
|
||||
__try {
|
||||
EnterCriticalSection(&env->me_windowsbug_lock);
|
||||
}
|
||||
__except ((GetExceptionCode() ==
|
||||
0xC0000194 /* STATUS_POSSIBLE_DEADLOCK / EXCEPTION_POSSIBLE_DEADLOCK */)
|
||||
? EXCEPTION_EXECUTE_HANDLER
|
||||
: EXCEPTION_CONTINUE_SEARCH) {
|
||||
return ERROR_POSSIBLE_DEADLOCK;
|
||||
}
|
||||
}
|
||||
|
||||
if ((env->me_flags & MDBX_EXCLUSIVE) ||
|
||||
|
@@ -1242,3 +1242,5 @@ wcsstr
|
||||
wcstol
|
||||
wcstombs
|
||||
wcstoul
|
||||
__C_specific_handler
|
||||
_except_handler4_common
|
||||
|
10
src/osal.c
10
src/osal.c
@@ -492,7 +492,15 @@ MDBX_INTERNAL_FUNC int mdbx_fastmutex_destroy(mdbx_fastmutex_t *fastmutex) {
|
||||
|
||||
MDBX_INTERNAL_FUNC int mdbx_fastmutex_acquire(mdbx_fastmutex_t *fastmutex) {
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
EnterCriticalSection(fastmutex);
|
||||
__try {
|
||||
EnterCriticalSection(fastmutex);
|
||||
} __except (
|
||||
(GetExceptionCode() ==
|
||||
0xC0000194 /* STATUS_POSSIBLE_DEADLOCK / EXCEPTION_POSSIBLE_DEADLOCK */)
|
||||
? EXCEPTION_EXECUTE_HANDLER
|
||||
: EXCEPTION_CONTINUE_SEARCH) {
|
||||
return ERROR_POSSIBLE_DEADLOCK;
|
||||
}
|
||||
return MDBX_SUCCESS;
|
||||
#else
|
||||
return pthread_mutex_lock(fastmutex);
|
||||
|
@@ -146,6 +146,7 @@ __extern_C key_t ftok(const char *, int);
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#include <excpt.h>
|
||||
#include <tlhelp32.h>
|
||||
#include <windows.h>
|
||||
#include <winnt.h>
|
||||
|
Reference in New Issue
Block a user