From: Stefan Eissing Date: Thu, 21 Apr 2022 11:21:50 +0000 (+0000) Subject: *) mod_http2: clear the h2 worker slot connection early to avoid X-Git-Tag: 2.5.0-alpha2-ci-test-only~372 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c66e6eb96866f319ccb398bbdc449099879cadea;p=thirdparty%2Fapache%2Fhttpd.git *) mod_http2: clear the h2 worker slot connection early to avoid any race in slot updates after the connection has been handled. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1900104 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/http2/h2_workers.c b/modules/http2/h2_workers.c index ec0889d2349..22c31f4f83b 100644 --- a/modules/http2/h2_workers.c +++ b/modules/http2/h2_workers.c @@ -254,6 +254,7 @@ static void slot_done(h2_slot *slot) static void* APR_THREAD_FUNC slot_run(apr_thread_t *thread, void *wctx) { h2_slot *slot = wctx; + conn_rec *c; /* Get the next c2 from mplx to process. */ while (get_next(slot)) { @@ -287,13 +288,14 @@ static void* APR_THREAD_FUNC slot_run(apr_thread_t *thread, void *wctx) * configurations by mod_h2 alone. */ AP_DEBUG_ASSERT(slot->connection != NULL); - slot->connection->id = (slot->connection->master->id << 8)^slot->id; - slot->connection->current_thread = thread; + c = slot->connection; + slot->connection = NULL; + c->id = (c->master->id << 8)^slot->id; + c->current_thread = thread; - ap_process_connection(slot->connection, ap_get_conn_socket(slot->connection)); + ap_process_connection(c, ap_get_conn_socket(c)); - h2_mplx_worker_c2_done(slot->connection); - slot->connection = NULL; + h2_mplx_worker_c2_done(c); } if (apr_atomic_read32(&slot->timed_out) == 0) {