commit d4979d9

default  ·  2023-02-10 10:23:42 +0000 UTC
parent 3ba3815
Added more job_fifo concurrency protections.
1 files changed,  +6, -2
+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 }