diff options
author | Otavio Salvador <otavio@debian.org> | 2011-07-12 18:26:07 +0400 |
---|---|---|
committer | Otavio Salvador <otavio@debian.org> | 2011-07-12 18:26:07 +0400 |
commit | b05747b55ccea8d2f2b830f89d3c0eb622d66784 (patch) | |
tree | 55c60a69500b59858ea0ab2e13271e8d48cb93d2 | |
parent | 70399749e1b4370b6abdf9ae8615c17e074e550f (diff) | |
parent | 45fab5b3c1d9274e24cd5d9ef9865468e84d8354 (diff) |
Merge pull request #56 from dorianj/master
libfreerdp-chanman: use platform independent semaphores
-rw-r--r-- | include/freerdp/utils/semaphore.h | 1 | ||||
-rw-r--r-- | libfreerdp-chanman/libchanman.c | 13 | ||||
-rw-r--r-- | libfreerdp-utils/semaphore.c | 9 |
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__ |