OSDN Git Service

* init.cc (dll_entry): Previous code reversion was ill-advised. Revert it.
authorcgf <cgf>
Mon, 27 Dec 2004 02:13:29 +0000 (02:13 +0000)
committercgf <cgf>
Mon, 27 Dec 2004 02:13:29 +0000 (02:13 +0000)
* sigproc.cc (child_info::sync): Ditto.
* pinfo.cc (_pinfo::exit): Don't set myself.procinfo to NULL since it is no
longer required.

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

index be0e65f..76b96eb 100644 (file)
@@ -1,5 +1,13 @@
 2004-12-26  Christopher Faylor  <cgf@timesys.com>
 
+       * init.cc (dll_entry): Previous code reversion was ill-advised.  Revert
+       it.
+       * sigproc.cc (child_info::sync): Ditto.
+       * pinfo.cc (_pinfo::exit): Don't set myself.procinfo to NULL since it
+       is no longer required.
+
+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.
index 7ba0dc3..7417f05 100644 (file)
@@ -13,6 +13,7 @@ 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;
@@ -126,6 +127,8 @@ dll_entry (HANDLE h, DWORD reason, void *static_load)
       dll_crt0_0 ();
       break;
     case DLL_PROCESS_DETACH:
+      if (myself && myself->exitcode == EXITCODE_UNSET)
+       myself->exitcode = 1 << 8;
       break;
     case DLL_THREAD_ATTACH:
       munge_threadfunc ();
index 24167b9..5d56fc4 100644 (file)
@@ -132,7 +132,6 @@ _pinfo::exit (UINT n, bool norecord)
   sigproc_printf ("Calling ExitProcess %d", n);
   _my_tls.stacklock = 0;
   _my_tls.stackptr = _my_tls.stack;
-  myself.procinfo = NULL;      // This breaks the abstraction a little doesn't it?
   ExitProcess (exitcode);
 }
 
index db4997b..b5a2815 100644 (file)
@@ -798,6 +798,13 @@ 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: