* child_info.h (child_info_fork::fork_retry): Declare new function.

* dcrt0.cc (child_info_fork::fork_retry): Define new function.
* fork.cc (frok::parent): Move retry decision into child_info_fork::fork_retry
and honor what it tells us to do.
* sigproc.cc (sig_send): Unhold signals on __SIGEXIT.
This commit is contained in:
Christopher Faylor
2006-03-15 00:29:14 +00:00
parent 67f85ee7b2
commit f02400f7c9
5 changed files with 34 additions and 8 deletions

View File

@ -326,12 +326,9 @@ frok::parent (void *stack_here)
/* Wait for subproc to initialize itself. */
if (!ch.sync (pi.dwProcessId, pi.hProcess, FORK_WAIT_TIMEOUT))
{
DWORD exit_code;
if (GetExitCodeProcess (pi.hProcess, &exit_code) && exit_code == EXITCODE_RETRY)
{
ch.retry--;
continue;
}
DWORD exit_code = ch.fork_retry (pi.hProcess);
if (!exit_code)
continue;
this_errno = EAGAIN;
/* Not thread safe, but do we care? */
static char buf[sizeof("died waiting for longjmp before "