diff options
author | Christopher Faylor <me@cgf.cx> | 2004-12-27 02:13:30 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2004-12-27 02:13:30 +0000 |
commit | 933673e83be8bebaf0c3b7646c6119d1acd5fc05 (patch) | |
tree | e50a2ef4bcb1833eb8fb520805ed20aa60840687 /winsup | |
parent | 445d5ce8fcffed71f4349c723b707dc779fe1cc2 (diff) | |
download | newlib-933673e83be8bebaf0c3b7646c6119d1acd5fc05.zip newlib-933673e83be8bebaf0c3b7646c6119d1acd5fc05.tar.gz newlib-933673e83be8bebaf0c3b7646c6119d1acd5fc05.tar.bz2 |
* 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.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 8 | ||||
-rw-r--r-- | winsup/cygwin/init.cc | 3 | ||||
-rw-r--r-- | winsup/cygwin/pinfo.cc | 1 | ||||
-rw-r--r-- | winsup/cygwin/sigproc.cc | 7 |
4 files changed, 18 insertions, 1 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index be0e65f..76b96eb 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -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. diff --git a/winsup/cygwin/init.cc b/winsup/cygwin/init.cc index 7ba0dc3..7417f05 100644 --- a/winsup/cygwin/init.cc +++ b/winsup/cygwin/init.cc @@ -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 (); diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 24167b9..5d56fc4 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -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); } diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index db4997b..b5a2815 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -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: |