From 374a3b1541c43c88e13867d879bd0fce9deefef7 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Wed, 28 Nov 2012 16:33:18 +0000 Subject: [PATCH] Merge r1374874 from trunk: WinNT MPM: Fix thread-safety issue in worker_main(). All workers were allocating from pchild without holding ' child_lock. Allocate from ptrans instead. Related to: PR 52196 The reporter suggests that the apr_thread_t for r->connection->current_thread should have a unique pool. This revision handles that for WinNT MPM, but not for other MPMs. Submitted by: trawick Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1414796 13f79535-47bb-0310-9956-ffa450edef68 --- STATUS | 4 ---- server/mpm/winnt/child.c | 5 +++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/STATUS b/STATUS index 50492080a1..2a0c2cf586 100644 --- a/STATUS +++ b/STATUS @@ -89,10 +89,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * WinNT MPM thread-safety issue at child startup - trunk patch: http://svn.apache.org/viewvc?view=revision&sortby=date&revision=1374874 - 2.4.x patch: trunk patch works - +1: trawick, gsmith, covener PATCHES PROPOSED TO BACKPORT FROM TRUNK: diff --git a/server/mpm/winnt/child.c b/server/mpm/winnt/child.c index ae34b07bb6..7983851a86 100644 --- a/server/mpm/winnt/child.c +++ b/server/mpm/winnt/child.c @@ -761,7 +761,7 @@ apr_status_t winnt_insert_network_bucket(conn_rec *c, */ static DWORD __stdcall worker_main(void *thread_num_val) { - apr_thread_t *thd = NULL; + apr_thread_t *thd; apr_os_thread_t osthd; static int requests_this_child = 0; winnt_conn_ctx_t *context = NULL; @@ -773,7 +773,6 @@ static DWORD __stdcall worker_main(void *thread_num_val) apr_int32_t disconnected; osthd = apr_os_thread_current(); - apr_os_thread_put(&thd, &osthd, pchild); while (1) { @@ -811,6 +810,8 @@ static DWORD __stdcall worker_main(void *thread_num_val) continue; } + thd = NULL; + apr_os_thread_put(&thd, &osthd, context->ptrans); c->current_thread = thd; /* follow ap_process_connection(c, context->sock) logic -- 2.50.1