aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-09-13 12:16:41 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-09-18 23:06:09 -0400
commit1fe385d782ae117d2a68266e14777d890eddf4e0 (patch)
treef0c3d3da40b80e031fa413f2ef5c13546ca14423
parent4d68bd4e120f6b7633bfb9ef979338b8f3d9e9fa (diff)
downloadstasis-1fe385d782ae117d2a68266e14777d890eddf4e0.tar.gz
Darwin portability: Use sem_open and sem_close instead of sem_init and sem_destroy
-rw-r--r--include/multiprocessing.h1
-rw-r--r--src/multiprocessing.c11
2 files changed, 8 insertions, 4 deletions
diff --git a/include/multiprocessing.h b/include/multiprocessing.h
index 9e0c429..648bd80 100644
--- a/include/multiprocessing.h
+++ b/include/multiprocessing.h
@@ -3,6 +3,7 @@
#define STASIS_MULTIPROCESSING_H
#include "core.h"
+#include <signal.h>
#include <sys/wait.h>
#include <semaphore.h>
#include <sys/mman.h>
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) {