summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorjsorg71 <jay.sorg@gmail.com>2016-04-26 23:31:59 -0700
committerjsorg71 <jay.sorg@gmail.com>2016-04-26 23:31:59 -0700
commitb0e1e213059e231347a3fe33c1308808f52c30e9 (patch)
treebc1d9378a27225b0adf47a03fa25a4b9b5f01aa2 /common
parentb3273a3bfcc343a2db72ad23eae128bd5609b494 (diff)
parentf93074a43019927a6aefc607bcd77172f5a03e08 (diff)
downloadxrdp-proprietary-b0e1e213059e231347a3fe33c1308808f52c30e9.tar.gz
xrdp-proprietary-b0e1e213059e231347a3fe33c1308808f52c30e9.zip
Merge pull request #366 from proski/macos-sem
Add unnamed semaphore support on Mac OS
Diffstat (limited to 'common')
-rw-r--r--common/thread_calls.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/common/thread_calls.c b/common/thread_calls.c
index a68e902a..d828b353 100644
--- a/common/thread_calls.c
+++ b/common/thread_calls.c
@@ -20,6 +20,10 @@
#if defined(_WIN32)
#include <windows.h>
+#elif defined(__APPLE__)
+#include <pthread.h>
+#include <dispatch/dispatch.h>
+#include <dispatch/time.h>
#else
#include <pthread.h>
#include <semaphore.h>
@@ -159,6 +163,9 @@ tc_sem_create(int init_count)
sem = CreateSemaphore(0, init_count, init_count + 10, 0);
return (tbus)sem;
+#elif defined(__APPLE__)
+ dispatch_semaphore_t sem = dispatch_semaphore_create(init_count);
+ return (tbus)sem;
#else
sem_t *sem = (sem_t *)NULL;
@@ -174,6 +181,8 @@ tc_sem_delete(tbus sem)
{
#if defined(_WIN32)
CloseHandle((HANDLE)sem);
+#elif defined(__APPLE__)
+ dispatch_release((dispatch_semaphore_t)sem);
#else
sem_t *lsem;
@@ -190,6 +199,9 @@ tc_sem_dec(tbus sem)
#if defined(_WIN32)
WaitForSingleObject((HANDLE)sem, INFINITE);
return 0;
+#elif defined(__APPLE__)
+ dispatch_semaphore_wait((dispatch_semaphore_t)sem, DISPATCH_TIME_FOREVER);
+ return 0;
#else
sem_wait((sem_t *)sem);
return 0;
@@ -203,6 +215,9 @@ tc_sem_inc(tbus sem)
#if defined(_WIN32)
ReleaseSemaphore((HANDLE)sem, 1, 0);
return 0;
+#elif defined(__APPLE__)
+ dispatch_semaphore_signal((dispatch_semaphore_t)sem);
+ return 0;
#else
sem_post((sem_t *)sem);
return 0;