OSDN Git Service

* init.cc (dll_entry): Remove exit code setting.
authorcgf <cgf>
Mon, 27 Dec 2004 00:35:18 +0000 (00:35 +0000)
committercgf <cgf>
Mon, 27 Dec 2004 00:35:18 +0000 (00:35 +0000)
* pinfo.cc (pinfo::init): Initialize exitcode to unset state rather than
SIGTERM.
(proc_waiter): Detect if exit code is unset and use status from
GetExitCodeProcess.
* sigproc.cc (child_info::sync): Remove exit code detection here since
proc_waiter now (again) detects it.

winsup/cygwin/ChangeLog
winsup/cygwin/init.cc
winsup/cygwin/pinfo.cc
winsup/cygwin/pinfo.h
winsup/cygwin/sigproc.cc

index 4ae5c13..be0e65f 100644 (file)
@@ -1,3 +1,13 @@
+2004-12-26  Christopher Faylor  <cgf@timesys.com>
+
+       * init.cc (dll_entry): Remove exit code setting.
+       * pinfo.cc (pinfo::init): Initialize exitcode to unset state rather
+       than SIGTERM.
+       (proc_waiter): Detect if exit code is unset and use status from
+       GetExitCodeProcess.
+       * sigproc.cc (child_info::sync): Remove exit code detection here since
+       proc_waiter now (again) detects it.
+
 2004-12-25  Christopher Faylor  <cgf@timesys.com>
 
        * fhandler.cc (fhandler_base::fchmod): Do the right thing when changing
index 261b20b..7ba0dc3 100644 (file)
@@ -13,7 +13,6 @@ details. */
 #include "thread.h"
 #include "perprocess.h"
 #include "cygtls.h"
-#include "pinfo.h"
 
 int NO_COPY dynamically_loaded;
 static char *search_for = (char *) cygthread::stub;
@@ -127,8 +126,6 @@ dll_entry (HANDLE h, DWORD reason, void *static_load)
       dll_crt0_0 ();
       break;
     case DLL_PROCESS_DETACH:
-      if (myself)
-       myself->exitcode = 1 << 8;
       break;
     case DLL_THREAD_ATTACH:
       munge_threadfunc ();
index 1bf6b5e..24167b9 100644 (file)
@@ -265,7 +265,7 @@ pinfo::init (pid_t n, DWORD flag, HANDLE in_h)
       else if (!(flag & PID_EXECED))
        {
          procinfo->pid = n;
-         procinfo->exitcode = SIGTERM;
+         procinfo->exitcode = EXITCODE_UNSET;
        }
       else
        {
@@ -702,6 +702,12 @@ proc_waiter (void *arg)
          /* Child exited.  Do some cleanup and signal myself.  */
          CloseHandle (vchild.rd_proc_pipe);
          vchild.rd_proc_pipe = NULL;
+         if (vchild->exitcode == EXITCODE_UNSET)
+           {
+             DWORD x;
+             GetExitCodeProcess (vchild.hProcess, &x);
+             vchild->exitcode = (x & 0xff) << 8;
+           }
          if (WIFEXITED (vchild->exitcode))
            si.si_sigval.sival_int = CLD_EXITED;
          else if (WCOREDUMP (vchild->exitcode))
index dd998a6..b649e0f 100644 (file)
@@ -26,6 +26,8 @@ enum picom
   PICOM_FIFO = 2
 };
 
+#define EXITCODE_UNSET 0x80000000
+
 class _pinfo
 {
 public:
index b5a2815..db4997b 100644 (file)
@@ -798,13 +798,6 @@ child_info::sync (pinfo& vchild, DWORD howlong)
     case WAIT_OBJECT_0 + 1:
       if (WaitForSingleObject (subproc_ready, 0) == WAIT_OBJECT_0)
        sigproc_printf ("should never happen.  noticed subproc_ready after process exit");
-      else
-       {
-         DWORD exitcode = 0;
-         (void) GetExitCodeProcess (vchild.hProcess, &exitcode);
-         vchild->exitcode = (exitcode & 0xff) << 8;
-         sigproc_printf ("non-cygwin exit value is %p", exitcode);
-       }
       res = false;
       break;
     default: