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.
@@ -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;
