diff options
author | Nuno Lopes <nlopess@php.net> | 2006-12-31 14:47:17 +0000 |
---|---|---|
committer | Nuno Lopes <nlopess@php.net> | 2006-12-31 14:47:17 +0000 |
commit | 877ee656224faf7b1dfc69b4af3740fa8c89d7c1 (patch) | |
tree | 525b95811dac671cd2b61b38304a36f933044eb5 /ext/standard/proc_open.c | |
parent | 5298554fb69c5c7e428b3feb6cec164391b00eb7 (diff) | |
download | php-git-877ee656224faf7b1dfc69b4af3740fa8c89d7c1.tar.gz |
Fixed bug #38542 (proc_get_status() returns wrong PID on windows)
Diffstat (limited to 'ext/standard/proc_open.c')
-rw-r--r-- | ext/standard/proc_open.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c index ae145267f2..3ed72566c3 100644 --- a/ext/standard/proc_open.c +++ b/ext/standard/proc_open.c @@ -216,10 +216,10 @@ static void proc_open_rsrc_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) #ifdef PHP_WIN32 - WaitForSingleObject(proc->child, INFINITE); - GetExitCodeProcess(proc->child, &wstatus); + WaitForSingleObject(proc->childHandle, INFINITE); + GetExitCodeProcess(proc->childHandle, &wstatus); FG(pclose_ret) = wstatus; - CloseHandle(proc->child); + CloseHandle(proc->childHandle); #elif HAVE_SYS_WAIT_H @@ -315,7 +315,7 @@ PHP_FUNCTION(proc_terminate) ZEND_FETCH_RESOURCE(proc, struct php_process_handle *, &zproc, -1, "process", le_proc_open); #ifdef PHP_WIN32 - TerminateProcess(proc->child, 255); + TerminateProcess(proc->childHandle, 255); #else kill(proc->child, sig_no); #endif @@ -371,7 +371,7 @@ PHP_FUNCTION(proc_get_status) #ifdef PHP_WIN32 - GetExitCodeProcess(proc->child, &wstatus); + GetExitCodeProcess(proc->childHandle, &wstatus); running = wstatus == STILL_ACTIVE; exitcode == STILL_ACTIVE ? -1 : wstatus; @@ -470,6 +470,7 @@ PHP_FUNCTION(proc_open) struct php_proc_open_descriptor_item descriptors[PHP_PROC_OPEN_MAX_DESCRIPTORS]; #ifdef PHP_WIN32 PROCESS_INFORMATION pi; + HANDLE childHandle; STARTUPINFO si; BOOL newprocok; SECURITY_ATTRIBUTES security; @@ -747,7 +748,8 @@ PHP_FUNCTION(proc_open) goto exit_fail; } - child = pi.hProcess; + childHandle = pi.hProcess; + child = pi.dwProcessId; CloseHandle(pi.hThread); #elif defined(NETWARE) @@ -870,6 +872,9 @@ PHP_FUNCTION(proc_open) proc->command = command; proc->npipes = ndesc; proc->child = child; +#ifdef PHP_WIN32 + proc->childHandle = childHandle; +#endif proc->env = env; if (pipes != NULL) { |