diff options
author | Greg Stein <gstein@apache.org> | 2001-09-20 08:59:31 +0000 |
---|---|---|
committer | Greg Stein <gstein@apache.org> | 2001-09-20 08:59:31 +0000 |
commit | f49bd22bf61423ef1ef91f883f10fbe4366a48d0 (patch) | |
tree | ff0d0e062cdca382a2e2f2d0c46fa69fc5090d6f /threadproc/win32/proc.c | |
parent | f92418bee86c72108b380a90e67dcbba859d8cfd (diff) | |
download | apr-f49bd22bf61423ef1ef91f883f10fbe4366a48d0.tar.gz |
Return the exit code from apr_proc_wait(). This is a combination of a patch
from Justin and Bill, plus a few additional tweaks.
Submitted by: Justin Erenkrantz <jerenkrantz@ebuilt.com>,
Bill Tutt <billtut@microsoft.com>
Reviewed by: Greg Stein
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@62350 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'threadproc/win32/proc.c')
-rw-r--r-- | threadproc/win32/proc.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/threadproc/win32/proc.c b/threadproc/win32/proc.c index 8a7848228..c1b26f025 100644 --- a/threadproc/win32/proc.c +++ b/threadproc/win32/proc.c @@ -540,27 +540,29 @@ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new, return APR_SUCCESS; } -APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc, apr_wait_how_e wait) +APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc, + apr_wait_t *exitcode, + apr_wait_how_e wait) { DWORD stat; + DWORD time; + if (!proc) return APR_ENOPROC; - if (wait == APR_WAIT) { - if ((stat = WaitForSingleObject(proc->hproc, - INFINITE)) == WAIT_OBJECT_0) { + + if (wait == APR_WAIT) + time = INFINITE; + else + time = 0; + + if ((stat = WaitForSingleObject(proc->hproc, time)) == WAIT_OBJECT_0) { + if (GetExitCodeProcess((HANDLE)proc->pid, &stat)) { + if (exitcode) + *exitcode = (apr_wait_t)stat; CloseHandle(proc->hproc); proc->hproc = NULL; return APR_CHILD_DONE; } - else if (stat == WAIT_TIMEOUT) { - return APR_CHILD_NOTDONE; - } - return apr_get_os_error(); - } - if ((stat = WaitForSingleObject((HANDLE)proc->hproc, 0)) == WAIT_OBJECT_0) { - CloseHandle(proc->hproc); - proc->hproc = NULL; - return APR_CHILD_DONE; } else if (stat == WAIT_TIMEOUT) { return APR_CHILD_NOTDONE; |