Revert "Cygwin: fork: Remember child not before success."
This reverts commit f03ea8e1c5
. That
commit leads to fork problems if cygserver is running:
https://cygwin.com/ml/cygwin-patches/2019-q2/msg00155.html
This commit is contained in:
parent
814f8af633
commit
fdae43a20a
|
@ -181,8 +181,7 @@ frok::child (volatile char * volatile here)
|
||||||
cygheap->fdtab.fixup_after_fork (hParent);
|
cygheap->fdtab.fixup_after_fork (hParent);
|
||||||
|
|
||||||
/* Signal that we have successfully initialized, so the parent can
|
/* Signal that we have successfully initialized, so the parent can
|
||||||
- transfer data/bss for dynamically loaded dlls (if any), and
|
- transfer data/bss for dynamically loaded dlls (if any), or
|
||||||
- start up some tracker threads to remember the child, or
|
|
||||||
- terminate the current fork call even if the child is initialized. */
|
- terminate the current fork call even if the child is initialized. */
|
||||||
sync_with_parent ("performed fork fixups and dynamic dll loading", true);
|
sync_with_parent ("performed fork fixups and dynamic dll loading", true);
|
||||||
|
|
||||||
|
@ -412,6 +411,20 @@ frok::parent (volatile char * volatile stack_here)
|
||||||
child.hProcess = hchild;
|
child.hProcess = hchild;
|
||||||
ch.postfork (child);
|
ch.postfork (child);
|
||||||
|
|
||||||
|
/* Hopefully, this will succeed. The alternative to doing things this
|
||||||
|
way is to reserve space prior to calling CreateProcess and then fill
|
||||||
|
it in afterwards. This requires more bookkeeping than I like, though,
|
||||||
|
so we'll just do it the easy way. So, terminate any child process if
|
||||||
|
we can't actually record the pid in the internal table. */
|
||||||
|
if (!child.remember (false))
|
||||||
|
{
|
||||||
|
this_errno = EAGAIN;
|
||||||
|
#ifdef DEBUGGING0
|
||||||
|
error ("child remember failed");
|
||||||
|
#endif
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
/* CHILD IS STOPPED */
|
/* CHILD IS STOPPED */
|
||||||
debug_printf ("child is alive (but stopped)");
|
debug_printf ("child is alive (but stopped)");
|
||||||
|
|
||||||
|
@ -495,20 +508,6 @@ frok::parent (volatile char * volatile stack_here)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hopefully, this will succeed. The alternative to doing things this
|
|
||||||
way is to reserve space prior to calling CreateProcess and then fill
|
|
||||||
it in afterwards. This requires more bookkeeping than I like, though,
|
|
||||||
so we'll just do it the easy way. So, terminate any child process if
|
|
||||||
we can't actually record the pid in the internal table. */
|
|
||||||
if (!child.remember (false))
|
|
||||||
{
|
|
||||||
this_errno = EAGAIN;
|
|
||||||
#ifdef DEBUGGING0
|
|
||||||
error ("child remember failed");
|
|
||||||
#endif
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Finally start the child up. */
|
/* Finally start the child up. */
|
||||||
resume_child (forker_finished);
|
resume_child (forker_finished);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue