orc: Use non-recursive mutex on Windows
authorSeungha Yang <seungha@centricular.com>
Mon, 29 May 2023 13:42:30 +0000 (22:42 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 29 May 2023 13:52:00 +0000 (13:52 +0000)
Make it consistent with that of Linux, and remove unnecessary
critical section init code

Part-of: <https://gitlab.freedesktop.org/gstreamer/orc/-/merge_requests/99>

orc/orconce.c

index 86315c1..d74a86e 100644 (file)
@@ -42,73 +42,33 @@ orc_global_mutex_unlock (void)
 
 #include <windows.h>
 
-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