From: Yann Ylavic Date: Wed, 25 Aug 2021 09:43:59 +0000 (+0000) Subject: mpm_{event,worker,prefork}: follow up to r1892587: restore ungraceful on MPM change. X-Git-Tag: 2.5.0-alpha2-ci-test-only~855 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f390a459161e55a7564bb45c6fcc677eeab12236;p=thirdparty%2Fapache%2Fhttpd.git mpm_{event,worker,prefork}: follow up to r1892587: restore ungraceful on MPM change. While at it add a comment for the rationale, including for MPM motorz. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1892595 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index dca98d4c3d8..7bfd6750c89 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -3767,6 +3767,11 @@ static int event_pre_config(apr_pool_t * pconf, apr_pool_t * plog, test_atomics = 1; } } + else if (retained->mpm->baton != retained) { + /* If the MPM changes on restart, be ungraceful */ + retained->mpm->baton = retained; + retained->mpm->was_graceful = 0; + } retained->mpm->mpm_state = AP_MPMQ_STARTING; ++retained->mpm->module_loads; diff --git a/server/mpm/motorz/motorz.c b/server/mpm/motorz/motorz.c index 311600c210d..42ce39be5eb 100644 --- a/server/mpm/motorz/motorz.c +++ b/server/mpm/motorz/motorz.c @@ -1476,15 +1476,17 @@ static int motorz_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp) if (!g_motorz_core) { mz = g_motorz_core = ap_retained_data_create(userdata_key, sizeof(*g_motorz_core)); mz->mpm = ap_unixd_mpm_get_retained_data(); + mz->mpm->baton = mz; mz->max_daemons_limit = -1; mz->timeout_ring = motorz_timer_ring; mz->pollset = motorz_pollset; } - mz->mpm->mpm_state = AP_MPMQ_STARTING; - if (mz->mpm->baton != mz) { - mz->mpm->was_graceful = 0; + else if (mz->mpm->baton != mz) { + /* If the MPM changes on restart, be ungraceful */ mz->mpm->baton = mz; + mz->mpm->was_graceful = 0; } + mz->mpm->mpm_state = AP_MPMQ_STARTING; ++mz->mpm->module_loads; /* sigh, want this only the second time around */ diff --git a/server/mpm/prefork/prefork.c b/server/mpm/prefork/prefork.c index 5b33b7fb82c..20241cf6c65 100644 --- a/server/mpm/prefork/prefork.c +++ b/server/mpm/prefork/prefork.c @@ -1318,6 +1318,11 @@ static int prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp retained->max_daemons_limit = -1; retained->idle_spawn_rate = 1; } + else if (retained->mpm->baton != retained) { + /* If the MPM changes on restart, be ungraceful */ + retained->mpm->baton = retained; + retained->mpm->was_graceful = 0; + } retained->mpm->mpm_state = AP_MPMQ_STARTING; ++retained->mpm->module_loads; diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index 1f370b2a3ba..c3f2be6f6a4 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -2036,6 +2036,11 @@ static int worker_pre_config(apr_pool_t *pconf, apr_pool_t *plog, retained->mpm->baton = retained; retained->max_daemons_limit = -1; } + else if (retained->mpm->baton != retained) { + /* If the MPM changes on restart, be ungraceful */ + retained->mpm->baton = retained; + retained->mpm->was_graceful = 0; + } retained->mpm->mpm_state = AP_MPMQ_STARTING; ++retained->mpm->module_loads;