diff options
| author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-09-13 12:16:41 -0400 | 
|---|---|---|
| committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-09-18 23:06:09 -0400 | 
| commit | 1fe385d782ae117d2a68266e14777d890eddf4e0 (patch) | |
| tree | f0c3d3da40b80e031fa413f2ef5c13546ca14423 /src | |
| parent | 4d68bd4e120f6b7633bfb9ef979338b8f3d9e9fa (diff) | |
| download | stasis-1fe385d782ae117d2a68266e14777d890eddf4e0.tar.gz | |
Darwin portability: Use sem_open and sem_close instead of sem_init and sem_destroy
Diffstat (limited to 'src')
| -rw-r--r-- | src/multiprocessing.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/src/multiprocessing.c b/src/multiprocessing.c index 6793f2d..0a91a56 100644 --- a/src/multiprocessing.c +++ b/src/multiprocessing.c @@ -306,7 +306,11 @@ struct MultiProcessingPool *mp_pool_init(const char *ident, const char *log_root              exit(1);          } -        if (sem_init(slot->gate, 1, 0) < 0) { +        char sema_name[PATH_MAX] = {0}; +        sprintf(sema_name, "/sem-%zu-%s-%s", mp_global_task_count, pool->ident, slot->ident); +        sem_unlink(sema_name); +        slot->gate = sem_open(sema_name, O_CREAT, 0600, sizeof(*slot->gate)); +        if (slot->gate == SEM_FAILED) {              perror("sem_init failed");              exit(1);          } @@ -317,11 +321,10 @@ struct MultiProcessingPool *mp_pool_init(const char *ident, const char *log_root  }  void mp_pool_free(struct MultiProcessingPool **pool) { -    //for (size_t i = 0; i < (*pool)->num_used; i++) {      for (size_t i = 0; i < (*pool)->num_alloc; i++) {          if ((*pool)->task[i].gate) { -            if (sem_destroy((*pool)->task[i].gate) < 0) { -                perror("sem_destroy failed"); +            if (sem_close((*pool)->task[i].gate) < 0) { +                perror("sem_close failed");                  exit(1);              }              if (munmap((*pool)->task[i].gate, sizeof(*(*pool)->task[i].gate)) < 0) { | 
