* cygheap.h (init_cygheap): Play more vfork shell games and move ctty_on_hold

and open_fhs_on_hold (back) here.
* dcrt0.cc (_dll_crt0): Just set impure_ptr_ptr here and let later
initialization deal with tls.
* dtable.cc (dtable::vfork_child_fixup): Move ctty considerations here.
(dtable:vfork_parent_restore): And here.
* fork.cc (vfork): Reflect change to ctty handling.
* perthread.h (vfork_save::fhctty): Eliminate.
* cygwin.din: Make more exports NOSIGFE that will never be interrupted by a
signal.
* init.cc (dll_entry): Set stackptr to NULL to catch problems earlier.
This commit is contained in:
Christopher Faylor
2004-01-03 18:15:03 +00:00
parent d84514bd0f
commit e80cbe3e52
10 changed files with 45 additions and 29 deletions

View File

@ -719,7 +719,7 @@ vfork ()
vf->ctty = myself->ctty;
vf->sid = myself->sid;
vf->pgid = myself->pgid;
vf->fhctty = cygheap->ctty;
cygheap->ctty_on_hold = cygheap->ctty;
vf->open_fhs = cygheap->open_fhs;
int res = cygheap->fdtab.vfork_child_dup () ? 0 : -1;
debug_printf ("%d = vfork()", res);
@ -739,20 +739,8 @@ vfork ()
myself->ctty = vf->ctty;
myself->sid = vf->sid;
myself->pgid = vf->pgid;
termios_printf ("cygheap->ctty %p, vf->fhctty %p", cygheap->ctty, vf->fhctty);
if (cygheap->ctty != vf->fhctty)
{
vf->fhctty->close ();
if (vf->pid <= 0)
{
if (vf->ctty)
vf->fhctty->close ();
cygheap->ctty = vf->fhctty;
}
}
if (vf->pid <= 0)
cygheap->open_fhs = vf->open_fhs;
termios_printf ("cygheap->ctty %p, cygheap->ctty_on_hold %p", cygheap->ctty, cygheap->ctty_on_hold);
cygheap->open_fhs = vf->open_fhs;
if (vf->pid < 0)
{