commit d4979d9
default
·
2023-02-10 10:23:42 +0000 UTC
parent 3ba3815
Added more job_fifo concurrency protections.
1 files changed,
+6,
-2
M
httpd.c
M
httpd.c
+6,
-2
1@@ -257,7 +257,8 @@ void job_post(const xs_val *job)
2 pthread_mutex_lock(&job_mutex);
3
4 /* add to the fifo */
5- job_fifo = xs_list_append(job_fifo, job);
6+ if (job_fifo != NULL)
7+ job_fifo = xs_list_append(job_fifo, job);
8
9 /* unlock the mutex */
10 pthread_mutex_unlock(&job_mutex);
11@@ -278,7 +279,8 @@ void job_wait(xs_val **job)
12 pthread_mutex_lock(&job_mutex);
13
14 /* dequeue */
15- job_fifo = xs_list_shift(job_fifo, job);
16+ if (job_fifo != NULL)
17+ job_fifo = xs_list_shift(job_fifo, job);
18
19 /* unlock the mutex */
20 pthread_mutex_unlock(&job_mutex);
21@@ -465,7 +467,9 @@ void httpd(void)
22 for (n = 0; n < n_threads; n++)
23 pthread_join(threads[n], NULL);
24
25+ pthread_mutex_lock(&job_mutex);
26 job_fifo = xs_free(job_fifo);
27+ pthread_mutex_unlock(&job_mutex);
28
29 srv_log(xs_fmt("httpd stop %s:%d", address, port));
30 }