mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fixed bug #76948 Failed shutdown/reboot or end session in Windows
This commit is contained in:
parent
945f315506
commit
b0547a3dfb
1 changed files with 16 additions and 1 deletions
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue