+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
#include "thread.h"
#include "perprocess.h"
#include "cygtls.h"
-#include "pinfo.h"
int NO_COPY dynamically_loaded;
static char *search_for = (char *) cygthread::stub;
dll_crt0_0 ();
break;
case DLL_PROCESS_DETACH:
- if (myself)
- myself->exitcode = 1 << 8;
break;
case DLL_THREAD_ATTACH:
munge_threadfunc ();
else if (!(flag & PID_EXECED))
{
procinfo->pid = n;
- procinfo->exitcode = SIGTERM;
+ procinfo->exitcode = EXITCODE_UNSET;
}
else
{
/* 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))
PICOM_FIFO = 2
};
+#define EXITCODE_UNSET 0x80000000
+
class _pinfo
{
public:
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: