summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/dtable.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2004-01-03 18:15:03 +0000
committerChristopher Faylor <me@cgf.cx>2004-01-03 18:15:03 +0000
commite80cbe3e52decfeb93fb121d624c2bf5cd42abf3 (patch)
treec55243b2c5a9b594f2dde7ffab0ceac747b52a7b /winsup/cygwin/dtable.cc
parentd84514bd0fa6780a30d28e3aa05f956d4c58ae30 (diff)
downloadcygnal-e80cbe3e52decfeb93fb121d624c2bf5cd42abf3.tar.gz
cygnal-e80cbe3e52decfeb93fb121d624c2bf5cd42abf3.tar.bz2
cygnal-e80cbe3e52decfeb93fb121d624c2bf5cd42abf3.zip
* 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.
Diffstat (limited to 'winsup/cygwin/dtable.cc')
-rw-r--r--winsup/cygwin/dtable.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc
index e5bb80218..141e17382 100644
--- a/winsup/cygwin/dtable.cc
+++ b/winsup/cygwin/dtable.cc
@@ -745,8 +745,13 @@ dtable::vfork_parent_restore ()
fds = fds_on_hold;
fds_on_hold = NULL;
cfree (deleteme);
-
ReleaseResourceLock (LOCK_FD_LIST, WRITE_LOCK | READ_LOCK, "restore");
+
+ cygheap->ctty = cygheap->ctty_on_hold; // revert
+ if (cygheap->ctty)
+ cygheap->ctty->close (); // Undo previous bump of this archetype
+ cygheap->ctty_on_hold = NULL;
+
return;
}
@@ -777,6 +782,12 @@ dtable::vfork_child_fixup ()
cfree (fds_on_hold);
fds_on_hold = NULL;
+ if (cygheap->ctty_on_hold)
+ {
+ cygheap->ctty_on_hold->close ();
+ cygheap->ctty_on_hold = NULL;
+ }
+
return;
}