|
|
@ -226,9 +226,10 @@ static php_cgi_globals_struct php_cgi_globals; |
|
|
#ifdef PHP_WIN32 |
|
|
#ifdef PHP_WIN32 |
|
|
#define WIN32_MAX_SPAWN_CHILDREN 64 |
|
|
#define WIN32_MAX_SPAWN_CHILDREN 64 |
|
|
HANDLE kid_cgi_ps[WIN32_MAX_SPAWN_CHILDREN]; |
|
|
HANDLE kid_cgi_ps[WIN32_MAX_SPAWN_CHILDREN]; |
|
|
int kids; |
|
|
|
|
|
|
|
|
int kids, cleaning_up = 0; |
|
|
HANDLE job = NULL; |
|
|
HANDLE job = NULL; |
|
|
JOBOBJECT_EXTENDED_LIMIT_INFORMATION job_info = { 0 }; |
|
|
JOBOBJECT_EXTENDED_LIMIT_INFORMATION job_info = { 0 }; |
|
|
|
|
|
CRITICAL_SECTION cleanup_lock; |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
#ifndef HAVE_ATTRIBUTE_WEAK |
|
|
#ifndef HAVE_ATTRIBUTE_WEAK |
|
|
@ -1492,6 +1493,10 @@ BOOL WINAPI fastcgi_cleanup(DWORD sig) |
|
|
{ |
|
|
{ |
|
|
int i = kids; |
|
|
int i = kids; |
|
|
|
|
|
|
|
|
|
|
|
EnterCriticalSection(&cleanup_lock); |
|
|
|
|
|
cleaning_up = 1; |
|
|
|
|
|
LeaveCriticalSection(&cleanup_lock); |
|
|
|
|
|
|
|
|
while (0 < i--) { |
|
|
while (0 < i--) { |
|
|
if (NULL == kid_cgi_ps[i]) { |
|
|
if (NULL == kid_cgi_ps[i]) { |
|
|
continue; |
|
|
continue; |
|
|
@ -2186,6 +2191,7 @@ consult the installation file that came with this distribution, or visit \n\ |
|
|
ZeroMemory(&kid_cgi_ps, sizeof(kid_cgi_ps)); |
|
|
ZeroMemory(&kid_cgi_ps, sizeof(kid_cgi_ps)); |
|
|
kids = children < WIN32_MAX_SPAWN_CHILDREN ? children : WIN32_MAX_SPAWN_CHILDREN; |
|
|
kids = children < WIN32_MAX_SPAWN_CHILDREN ? children : WIN32_MAX_SPAWN_CHILDREN; |
|
|
|
|
|
|
|
|
|
|
|
InitializeCriticalSection(&cleanup_lock); |
|
|
SetConsoleCtrlHandler(fastcgi_cleanup, TRUE); |
|
|
SetConsoleCtrlHandler(fastcgi_cleanup, TRUE); |
|
|
|
|
|
|
|
|
/* kids will inherit the env, don't let them spawn */ |
|
|
/* kids will inherit the env, don't let them spawn */ |
|
|
@ -2234,6 +2240,13 @@ consult the installation file that came with this distribution, or visit \n\ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
while (parent) { |
|
|
while (parent) { |
|
|
|
|
|
EnterCriticalSection(&cleanup_lock); |
|
|
|
|
|
if (cleaning_up) { |
|
|
|
|
|
DeleteCriticalSection(&cleanup_lock); |
|
|
|
|
|
goto parent_out; |
|
|
|
|
|
} |
|
|
|
|
|
LeaveCriticalSection(&cleanup_lock); |
|
|
|
|
|
|
|
|
i = kids; |
|
|
i = kids; |
|
|
while (0 < i--) { |
|
|
while (0 < i--) { |
|
|
DWORD status; |
|
|
DWORD status; |
|
|
@ -2289,6 +2302,8 @@ consult the installation file that came with this distribution, or visit \n\ |
|
|
/* restore my env */ |
|
|
/* restore my env */ |
|
|
SetEnvironmentVariable("PHP_FCGI_CHILDREN", kid_buf); |
|
|
SetEnvironmentVariable("PHP_FCGI_CHILDREN", kid_buf); |
|
|
|
|
|
|
|
|
|
|
|
DeleteCriticalSection(&cleanup_lock); |
|
|
|
|
|
|
|
|
goto parent_out; |
|
|
goto parent_out; |
|
|
} else { |
|
|
} else { |
|
|
parent = 0; |
|
|
parent = 0; |
|
|
|