summaryrefslogtreecommitdiff
path: root/threadproc/win32/proc.c
diff options
context:
space:
mode:
authorGreg Stein <gstein@apache.org>2001-09-20 08:59:31 +0000
committerGreg Stein <gstein@apache.org>2001-09-20 08:59:31 +0000
commitf49bd22bf61423ef1ef91f883f10fbe4366a48d0 (patch)
treeff0d0e062cdca382a2e2f2d0c46fa69fc5090d6f /threadproc/win32/proc.c
parentf92418bee86c72108b380a90e67dcbba859d8cfd (diff)
downloadapr-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.c28
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;