mpm_fdqueue: return EOF for ap_queue_interrupt_*() when terminated.
* 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
diff --git a/server/mpm_fdqueue.c b/server/mpm_fdqueue.c
index c812450..3697ca7 100644
--- a/server/mpm_fdqueue.c
+++ b/server/mpm_fdqueue.c
@@ -493,6 +493,10 @@
{
apr_status_t rv;
+ if (queue->terminated) {
+ return APR_EOF;
+ }
+
if ((rv = apr_thread_mutex_lock(queue->one_big_mutex)) != APR_SUCCESS) {
return rv;
}
diff --git a/server/mpm_fdqueue.h b/server/mpm_fdqueue.h
index ef9b0ab..0dd558b 100644
--- a/server/mpm_fdqueue.h
+++ b/server/mpm_fdqueue.h
@@ -83,7 +83,7 @@
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;