Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRDP/FreeRDP-old.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOtavio Salvador <otavio@debian.org>2011-07-12 18:26:07 +0400
committerOtavio Salvador <otavio@debian.org>2011-07-12 18:26:07 +0400
commitb05747b55ccea8d2f2b830f89d3c0eb622d66784 (patch)
tree55c60a69500b59858ea0ab2e13271e8d48cb93d2
parent70399749e1b4370b6abdf9ae8615c17e074e550f (diff)
parent45fab5b3c1d9274e24cd5d9ef9865468e84d8354 (diff)
Merge pull request #56 from dorianj/master
libfreerdp-chanman: use platform independent semaphores
-rw-r--r--include/freerdp/utils/semaphore.h1
-rw-r--r--libfreerdp-chanman/libchanman.c13
-rw-r--r--libfreerdp-utils/semaphore.c9
3 files changed, 17 insertions, 6 deletions
diff --git a/include/freerdp/utils/semaphore.h b/include/freerdp/utils/semaphore.h
index 6f630e0..2230af2 100644
--- a/include/freerdp/utils/semaphore.h
+++ b/include/freerdp/utils/semaphore.h
@@ -23,5 +23,6 @@
void freerdp_sem_create(void * sem_struct, int iv);
void freerdp_sem_signal(void * sem_struct);
void freerdp_sem_wait(void * sem_struct);
+void freerdp_sem_destroy(void * sem_struct);
#endif /* __SEMAPHORE_UTILS_H */
diff --git a/libfreerdp-chanman/libchanman.c b/libfreerdp-chanman/libchanman.c
index 0d510dc..1a82743 100644
--- a/libfreerdp-chanman/libchanman.c
+++ b/libfreerdp-chanman/libchanman.c
@@ -56,6 +56,7 @@
#else
#include <dlfcn.h>
#include <semaphore.h>
+#include <freerdp/utils/semaphore.h>
#include <netdb.h>
#include <unistd.h>
#include <pthread.h>
@@ -65,10 +66,10 @@
#define MUTEX_UNLOCK(m) pthread_mutex_unlock(&m)
#define MUTEX_DESTROY(m) pthread_mutex_destroy(&m)
#define SEMAPHORE sem_t
-#define SEMAPHORE_INIT(s, i, m) sem_init(&s, i, m)
-#define SEMAPHORE_WAIT(s) sem_wait(&s)
-#define SEMAPHORE_POST(s) sem_post(&s)
-#define SEMAPHORE_DESTROY(s) sem_destroy(&s)
+#define SEMAPHORE_INIT(s, m) freerdp_sem_create(&(s), (m))
+#define SEMAPHORE_WAIT(s) freerdp_sem_wait(&(s))
+#define SEMAPHORE_POST(s) freerdp_sem_signal(&(s))
+#define SEMAPHORE_DESTROY(s) freerdp_sem_destroy(&(s))
#define CHR char
#define DLOPEN(f) dlopen(f, RTLD_LOCAL | RTLD_LAZY)
#define DLSYM(f, n) dlsym(f, n)
@@ -652,8 +653,8 @@ freerdp_chanman_new(void)
chan_man = (rdpChanMan *) malloc(sizeof(rdpChanMan));
memset(chan_man, 0, sizeof(rdpChanMan));
- SEMAPHORE_INIT(chan_man->sem, 0, 1); /* start at 1 */
- SEMAPHORE_INIT(chan_man->sem_event, 0, 1); /* start at 1 */
+ SEMAPHORE_INIT(chan_man->sem,1); /* start at 1 */
+ SEMAPHORE_INIT(chan_man->sem_event, 1); /* start at 1 */
#ifdef _WIN32
chan_man->chan_event = CreateEvent(NULL, TRUE, FALSE, NULL);
#else
diff --git a/libfreerdp-utils/semaphore.c b/libfreerdp-utils/semaphore.c
index 8d1acde..3661377 100644
--- a/libfreerdp-utils/semaphore.c
+++ b/libfreerdp-utils/semaphore.c
@@ -37,6 +37,15 @@ void freerdp_sem_create(void * sem_struct, int iv)
#endif
}
+void freerdp_sem_destroy(void * sem_struct)
+{
+#ifdef __APPLE__
+ semaphore_destroy(mach_task_self(), *((semaphore_t *)sem_struct));
+#else
+ sem_destroy((sem_t *)sem_struct);
+#endif
+}
+
void freerdp_sem_signal(void * sem_struct)
{
#ifdef __APPLE__