]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mpm_fdqueue: return EOF for ap_queue_interrupt_*() when terminated.
authorYann Ylavic <ylavic@apache.org>
Thu, 22 Jul 2021 15:48:03 +0000 (15:48 +0000)
committerYann Ylavic <ylavic@apache.org>
Thu, 22 Jul 2021 15:48:03 +0000 (15:48 +0000)
* server/mpm_fdqueue.c (queue_interrupt): noop and return APR_EOF when queue is
  terminated already.

* server/mpm_fdqueue.h (struct fd_queue_t): make "terminated" volatile.

Follow up to r1891716.
Github: closes #208

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1891724 13f79535-47bb-0310-9956-ffa450edef68

server/mpm_fdqueue.c
server/mpm_fdqueue.h

index c81245078ab509b85eb771ca75a437774860cd79..3697ca722f621ab081acaea7e3927e6a9d9e8359 100644 (file)
@@ -493,6 +493,10 @@ static apr_status_t queue_interrupt(fd_queue_t *queue, int all, int term)
 {
     apr_status_t rv;
 
+    if (queue->terminated) {
+        return APR_EOF;
+    }
+
     if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
         return rv;
     }
index ef9b0ab75f3a191d56c258acfd6e5df4f5525cba..0dd558b938a3b05a9eb0474c0742ced553e7436e 100644 (file)
@@ -83,7 +83,7 @@ struct fd_queue_t
     unsigned int out;
     apr_thread_mutex_t *one_big_mutex;
     apr_thread_cond_t *not_empty;
-    int terminated;
+    volatile int terminated;
 };
 typedef struct fd_queue_t fd_queue_t;