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
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:
*/
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;
apr_int32_t disconnected;
osthd = apr_os_thread_current();
- apr_os_thread_put(&thd, &osthd, pchild);
while (1) {
continue;
}
+ thd = NULL;
+ apr_os_thread_put(&thd, &osthd, context->ptrans);
c->current_thread = thd;
/* follow ap_process_connection(c, context->sock) logic