summaryrefslogtreecommitdiff
path: root/httpd.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2023-05-07 17:55:47 +0200
committerdefault <nobody@localhost>2023-05-07 17:55:47 +0200
commit0a93eae0a87764f23aeec40c06202770d25f48f1 (patch)
tree4fecf515bae361bec65e951161f68f1c605f4413 /httpd.c
parent699702cd72046d1c613f9952ab310882710843b0 (diff)
parent3093bd2315229a4692e0466257e8a8ae3ed9c382 (diff)
Merge branch 'master' of grunfink-codeberg:grunfink/snac2
Diffstat (limited to 'httpd.c')
-rw-r--r--httpd.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/httpd.c b/httpd.c
index fe93727..7a25b84 100644
--- a/httpd.c
+++ b/httpd.c
@@ -299,7 +299,7 @@ void term_handler(int s)
static pthread_mutex_t job_mutex;
/* semaphre to trigger job processing */
-static sem_t job_sem;
+static sem_t *job_sem;
/* fifo of jobs */
xs_list *job_fifo = NULL;
@@ -332,7 +332,7 @@ void job_post(const xs_val *job, int urgent)
}
/* ask for someone to attend it */
- sem_post(&job_sem);
+ sem_post(job_sem);
}
@@ -341,7 +341,7 @@ void job_wait(xs_val **job)
{
*job = NULL;
- if (sem_wait(&job_sem) == 0) {
+ if (sem_wait(job_sem) == 0) {
/* lock the mutex */
pthread_mutex_lock(&job_mutex);
@@ -352,6 +352,10 @@ void job_wait(xs_val **job)
/* unlock the mutex */
pthread_mutex_unlock(&job_mutex);
}
+
+ if (!*job) {
+ sem_close(job_sem);
+ }
}
@@ -362,7 +366,7 @@ void job_wait(xs_val **job)
static void *job_thread(void *arg)
/* job thread */
{
- int pid = (char *) arg - (char *) 0x0;
+ int pid = (int)(uintptr_t)arg;
srv_debug(1, xs_fmt("job thread %d started", pid));
@@ -503,7 +507,7 @@ void httpd(void)
/* initialize the job control engine */
pthread_mutex_init(&job_mutex, NULL);
- sem_init(&job_sem, 0, 0);
+ job_sem = sem_open("/job", O_CREAT, 0644, 0);
job_fifo = xs_list_new();
/* initialize sleep control */