summaryrefslogtreecommitdiff
path: root/libs/pbd/pbd
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-12-02 13:38:59 +0100
committerRobin Gareus <robin@gareus.org>2015-12-02 13:59:48 +0100
commit14d6470ad36a1682966ff93e774849901055a916 (patch)
treed37838c341a09f1814db6783b920ceab4cbdf6aa /libs/pbd/pbd
parente9be313c11cb0eafd7fcd2800748ae80be95787f (diff)
prefer pthread-semaphores (posix API) with mingw
Hopefully this resolves glitches on hyperthreading machines. Apart from using unnamed Semaphores, pthread-w32 includes additional locks (guess: mem-barriers), a fallback implementation and windows-specific tricks that I'd rather not want to know about :)
Diffstat (limited to 'libs/pbd/pbd')
-rw-r--r--libs/pbd/pbd/semutils.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/libs/pbd/pbd/semutils.h b/libs/pbd/pbd/semutils.h
index 5c0191e25b..50ac41919c 100644
--- a/libs/pbd/pbd/semutils.h
+++ b/libs/pbd/pbd/semutils.h
@@ -19,9 +19,14 @@
#ifndef __pbd_semutils_h__
#define __pbd_semutils_h__
-#ifdef PLATFORM_WINDOWS
+#if (defined PLATFORM_WINDOWS && !defined USE_PTW32_SEMAPHORE)
+#define WINDOWS_SEMAPHORE 1
+#endif
+
+#ifdef WINDOWS_SEMAPHORE
#include <windows.h>
#else
+#include <pthread.h>
#include <semaphore.h>
#endif
@@ -31,7 +36,7 @@ namespace PBD {
class LIBPBD_API ProcessSemaphore {
private:
-#ifdef PLATFORM_WINDOWS
+#ifdef WINDOWS_SEMAPHORE
HANDLE _sem;
#elif __APPLE__
@@ -46,7 +51,7 @@ class LIBPBD_API ProcessSemaphore {
ProcessSemaphore (const char* name, int val);
~ProcessSemaphore ();
-#ifdef PLATFORM_WINDOWS
+#ifdef WINDOWS_SEMAPHORE
int signal ();
int wait ();