From 9d806d6c798d3fae432d5a0450e4846499044a8e Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Mon, 29 May 2023 22:42:30 +0900 Subject: [PATCH] orc: Use non-recursive mutex on Windows Make it consistent with that of Linux, and remove unnecessary critical section init code Part-of: --- orc/orconce.c | 52 ++++++---------------------------------------------- 1 file changed, 6 insertions(+), 46 deletions(-) diff --git a/orc/orconce.c b/orc/orconce.c index 86315c1..d74a86e 100644 --- a/orc/orconce.c +++ b/orc/orconce.c @@ -42,73 +42,33 @@ orc_global_mutex_unlock (void) #include -static CRITICAL_SECTION once_mutex; -static CRITICAL_SECTION global_mutex; +static SRWLOCK once_mutex = SRWLOCK_INIT; +static SRWLOCK global_mutex = SRWLOCK_INIT; void orc_once_mutex_lock (void) { - EnterCriticalSection (&once_mutex); + AcquireSRWLockExclusive (&once_mutex); } void orc_once_mutex_unlock (void) { - LeaveCriticalSection (&once_mutex); + ReleaseSRWLockExclusive (&once_mutex); } void orc_global_mutex_lock (void) { - EnterCriticalSection (&global_mutex); + AcquireSRWLockExclusive (&global_mutex); } void orc_global_mutex_unlock (void) { - LeaveCriticalSection (&global_mutex); + ReleaseSRWLockExclusive (&global_mutex); } -#ifdef _MSC_VER - -#pragma section(".CRT$XCU",read) - -static void __cdecl -orc_once_cs_init (void) -{ - InitializeCriticalSection (&once_mutex); - InitializeCriticalSection (&global_mutex); -} - -__declspec(allocate(".CRT$XCU")) -void (__cdecl * orc_once_cs_init_constructor)(void) = orc_once_cs_init; - -#elif defined(__GNUC__) - -static void orc_once_cs_init (void) __attribute__((constructor)); - -static void -orc_once_cs_init (void) -{ - InitializeCriticalSection (&once_mutex); - InitializeCriticalSection (&global_mutex); -} - -#else -#error Expecting GCC or MSVC on Windows -#endif - -#if 0 -BOOL WINAPI -DllMain (HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) -{ - if (dwReason == DLL_PROCESS_ATTACH) { - InitializeCriticalSection (&once_mutex); - } - return TRUE; -} -#endif - #else void -- 2.7.4