From 44ebaf0149d5e5726181541fa95666d050024dc4 Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Fri, 13 Jul 2018 15:16:37 +0000 Subject: [PATCH] event: follow up to r1835845. Always favor APR_POLLSET_WAKEABLE over method/implementation. Probably more about correctness than a real issue since systems are unlikely to implement more than one/their method... This also makes use of pruntime for event_pollset (an oversight from r1835845). git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1835846 13f79535-47bb-0310-9956-ffa450edef68 --- server/mpm/event/event.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 223d00e646..fd60a57d99 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -2486,6 +2486,7 @@ static void *APR_THREAD_FUNC start_threads(apr_thread_t * thd, void *dummy) const apr_uint32_t pollset_size = (apr_uint32_t)num_listensocks + (apr_uint32_t)threads_per_child * (async_factor > 2 ? async_factor : 2); + int pollset_flags; /* All threads (listener, workers) and synchronization objects (queues, * pollset, mutexes...) created here should have at least the lifetime of @@ -2536,25 +2537,30 @@ static void *APR_THREAD_FUNC start_threads(apr_thread_t * thd, void *dummy) } /* Create the main pollset */ + pollset_flags = APR_POLLSET_THREADSAFE | APR_POLLSET_NOCOPY | + APR_POLLSET_NODEFAULT | APR_POLLSET_WAKEABLE; for (i = 0; i < sizeof(good_methods) / sizeof(good_methods[0]); i++) { - apr_uint32_t flags = APR_POLLSET_THREADSAFE | APR_POLLSET_NOCOPY | - APR_POLLSET_NODEFAULT | APR_POLLSET_WAKEABLE; - rv = apr_pollset_create_ex(&event_pollset, pollset_size, pchild, flags, - good_methods[i]); + rv = apr_pollset_create_ex(&event_pollset, pollset_size, pruntime, + pollset_flags, good_methods[i]); if (rv == APR_SUCCESS) { listener_is_wakeable = 1; break; } - flags &= ~APR_POLLSET_WAKEABLE; - rv = apr_pollset_create_ex(&event_pollset, pollset_size, pchild, flags, - good_methods[i]); - if (rv == APR_SUCCESS) { - break; + } + if (rv != APR_SUCCESS) { + pollset_flags &= ~APR_POLLSET_WAKEABLE; + for (i = 0; i < sizeof(good_methods) / sizeof(good_methods[0]); i++) { + rv = apr_pollset_create_ex(&event_pollset, pollset_size, pruntime, + pollset_flags, good_methods[i]); + if (rv == APR_SUCCESS) { + break; + } } } if (rv != APR_SUCCESS) { - rv = apr_pollset_create(&event_pollset, pollset_size, pchild, - APR_POLLSET_THREADSAFE | APR_POLLSET_NOCOPY); + pollset_flags &= ~APR_POLLSET_NODEFAULT; + rv = apr_pollset_create(&event_pollset, pollset_size, pruntime, + pollset_flags); } if (rv != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf, APLOGNO(03103) -- 2.40.0