Use unnamed semaphores on linux

This avoids the risk of namespace collisions for named semaphores
(where the names are global for the whole machine), on platforms
where we strictly don't need to use the named semaphores.
This commit is contained in:
Martin Storsjö 2014-03-02 23:13:39 +02:00
parent 5480ffafdf
commit 4814d5828d

View File

@ -58,6 +58,7 @@
#include "WelsThreadLib.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef MT_ENABLED
@ -254,15 +255,8 @@ WELS_THREAD_ERROR_CODE WelsMutexDestroy (WELS_MUTEX* mutex) {
// unnamed semaphores aren't supported on OS X
WELS_THREAD_ERROR_CODE WelsEventInit (WELS_EVENT* event) {
return sem_init (*event, 0, 0);
}
WELS_THREAD_ERROR_CODE WelsEventDestroy (WELS_EVENT* event) {
return sem_destroy (*event); // match with sem_init
}
WELS_THREAD_ERROR_CODE WelsEventOpen (WELS_EVENT* p_event, const char* event_name) {
#ifdef __APPLE__
if (p_event == NULL || event_name == NULL)
return WELS_THREAD_ERROR_GENERAL;
*p_event = sem_open (event_name, O_CREAT, (S_IRUSR | S_IWUSR)/*0600*/, 0);
@ -273,12 +267,30 @@ WELS_THREAD_ERROR_CODE WelsEventOpen (WELS_EVENT* p_event, const char* event_
} else {
return WELS_THREAD_ERROR_OK;
}
#else
WELS_EVENT event = (WELS_EVENT) malloc(sizeof(*event));
if (event == NULL)
return WELS_THREAD_ERROR_GENERAL;
WELS_THREAD_ERROR_CODE err = sem_init(event, 0, 0);
if (!err) {
*p_event = event;
return err;
}
free(event);
return err;
#endif
}
WELS_THREAD_ERROR_CODE WelsEventClose (WELS_EVENT* event, const char* event_name) {
#ifdef __APPLE__
WELS_THREAD_ERROR_CODE err = sem_close (*event); // match with sem_open
if (event_name)
sem_unlink (event_name);
return err;
#else
WELS_THREAD_ERROR_CODE err = sem_destroy (*event); // match with sem_init
free(*event);
return err;
#endif
}
WELS_THREAD_ERROR_CODE WelsEventSignal (WELS_EVENT* event) {