From: Yann Ylavic Date: Sun, 6 Dec 2020 22:35:08 +0000 (+0000) Subject: mod_http2: revert r1883675. X-Git-Tag: 2.5.0-alpha2-ci-test-only~1105 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8e1f715f30b7d4b4a86ac6ed3a8f49751952d88;p=thirdparty%2Fapache%2Fhttpd.git mod_http2: revert r1883675. The issue was caused by races in APR_POOL_DEBUG code. Stopping the h2 workers threads as pre_cleanup of workers->pool is soon enough since it's a child of pchild already. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1884168 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/http2/h2_workers.c b/modules/http2/h2_workers.c index 020e0c90873..949ae439c7f 100644 --- a/modules/http2/h2_workers.c +++ b/modules/http2/h2_workers.c @@ -277,7 +277,7 @@ static apr_status_t workers_pool_cleanup(void *data) return APR_SUCCESS; } -h2_workers *h2_workers_create(server_rec *s, apr_pool_t *pchild, +h2_workers *h2_workers_create(server_rec *s, apr_pool_t *server_pool, int min_workers, int max_workers, int idle_secs) { @@ -287,14 +287,14 @@ h2_workers *h2_workers_create(server_rec *s, apr_pool_t *pchild, int i, n; ap_assert(s); - ap_assert(pchild); + ap_assert(server_pool); /* let's have our own pool that will be parent to all h2_worker * instances we create. This happens in various threads, but always * guarded by our lock. Without this pool, all subpool creations would * happen on the pool handed to us, which we do not guard. */ - apr_pool_create(&pool, pchild); + apr_pool_create(&pool, server_pool); apr_pool_tag(pool, "h2_workers"); workers = apr_pcalloc(pool, sizeof(h2_workers)); if (!workers) { @@ -365,10 +365,7 @@ h2_workers *h2_workers_create(server_rec *s, apr_pool_t *pchild, workers->dynamic = (workers->worker_count < workers->max_workers); } if (status == APR_SUCCESS) { - /* We want to stop and wait for workers threads before workers->pool - * is destroyed, thus as pre_cleanup of the parent pool (pchild). - */ - apr_pool_pre_cleanup_register(pchild, workers, workers_pool_cleanup); + apr_pool_pre_cleanup_register(pool, workers, workers_pool_cleanup); return workers; } return NULL;