bjh 00/01/09 22:21:13
Modified: src/lib/apr/threadproc/os2 proc.c
Log:
OS/2: Use native API for process waits.
Revision Changes Path
1.13 +13 -18 apache-2.0/src/lib/apr/threadproc/os2/proc.c
Index: proc.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/threadproc/os2/proc.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- proc.c 1999/12/31 04:15:12 1.12
+++ proc.c 2000/01/10 06:21:12 1.13
@@ -53,9 +53,11 @@
*
*/
+#define INCL_DOS
+#define INCL_DOSERRORS
+
#include "threadproc.h"
#include "fileio.h"
-
#include "apr_config.h"
#include "apr_thread_proc.h"
#include "apr_file_io.h"
@@ -68,7 +70,6 @@
#include <unistd.h>
#include <process.h>
#include <stdlib.h>
-#define INCL_DOS
#include <os2.h>
ap_status_t ap_createprocattr_init(struct procattr_t **new, ap_context_t
*cont)
@@ -371,8 +372,8 @@
} else
env_block = NULL;
- status = DosExecPgm(error_object, sizeof(error_object),
- attr->detached ? EXEC_BACKGROUND : EXEC_ASYNC,
+ status = DosExecPgm(error_object, sizeof(error_object),
+ attr->detached ? EXEC_BACKGROUND : EXEC_ASYNCRESULT,
cmdline, env_block, &rescodes, cmdline);
(*new)->pid = rescodes.codeTerminate;
@@ -433,7 +434,9 @@
ap_status_t ap_wait_proc(struct proc_t *proc,
ap_wait_how_e wait)
{
- pid_t stat;
+ RESULTCODES codes;
+ ULONG rc;
+ PID pid;
if (!proc)
return APR_ENOPROC;
@@ -441,24 +444,16 @@
if (!proc->running)
return APR_CHILD_DONE;
- if (wait == APR_WAIT) {
- if ((stat = waitpid(proc->pid, NULL, WUNTRACED)) > 0) {
- proc->running = FALSE;
- return APR_CHILD_DONE;
- } else if (stat == 0) {
- return APR_CHILD_NOTDONE;
- }
- return errno;
- }
+ rc = DosWaitChild(DCWA_PROCESS, wait == APR_WAIT ? DCWW_WAIT :
DCWW_NOWAIT, &codes, &pid, proc->pid);
- if ((stat = waitpid(proc->pid, NULL, WUNTRACED | WNOHANG)) > 0) {
- proc->running = FALSE;
+ if (rc == 0) {
+ proc->running = 0;
return APR_CHILD_DONE;
- } else if (stat == 0) {
+ } else if (rc == ERROR_CHILD_NOT_COMPLETE) {
return APR_CHILD_NOTDONE;
}
- return errno;
+ return os2errno(rc);
}