From: Yann Ylavic Date: Thu, 22 Jul 2021 15:48:03 +0000 (+0000) Subject: mpm_fdqueue: return EOF for ap_queue_interrupt_*() when terminated. X-Git-Tag: 2.5.0-alpha2-ci-test-only~885 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb17448b566ce7b806ac65f3554d4ed4380ade69;p=thirdparty%2Fapache%2Fhttpd.git 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 c81245078ab..3697ca722f6 100644 --- a/server/mpm_fdqueue.c +++ b/server/mpm_fdqueue.c @@ -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; } diff --git a/server/mpm_fdqueue.h b/server/mpm_fdqueue.h index ef9b0ab75f3..0dd558b938a 100644 --- a/server/mpm_fdqueue.h +++ b/server/mpm_fdqueue.h @@ -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;