static sem_t* create_semaphore(const char* const name)
{
-#ifdef __APPLE__
- sem_t* p = sem_open(name, O_CREAT, 0600, 0);
+#ifdef VGO_darwin
+ char name_and_pid[32];
+ snprintf(name_and_pid, sizeof(name_and_pid), "%s-%d", name, getpid());
+ sem_t* p = sem_open(name_and_pid, O_CREAT | O_EXCL, 0600, 0);
+ if (p == SEM_FAILED) {
+ perror("sem_open");
+ return NULL;
+ }
return p;
#else
sem_t* p = malloc(sizeof(*p));
static void destroy_semaphore(const char* const name, sem_t* p)
{
-#ifdef __APPLE__
+#ifdef VGO_darwin
sem_close(p);
sem_unlink(name);
#else