summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_tty.cc
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2003-12-12 20:46:03 +0000
committerChristopher Faylor <me@cgf.cx>2003-12-12 20:46:03 +0000
commit9279515ae13bbaae37a1d9e8fc4beef0b7d77add (patch)
treed6650ed5d8f1705512b1e83da93f51d1a452848c /winsup/cygwin/fhandler_tty.cc
parentfac0681d6cd0dea950ccf1ea79c0879fdf4321b4 (diff)
downloadcygnal-9279515ae13bbaae37a1d9e8fc4beef0b7d77add.tar.gz
cygnal-9279515ae13bbaae37a1d9e8fc4beef0b7d77add.tar.bz2
cygnal-9279515ae13bbaae37a1d9e8fc4beef0b7d77add.zip
* dtable.cc (dtable::delete_archetype): Add debugging.
(dtable::release): Move archetype deletion here. (dtable::vfork_child_dup): Increment ctty usecount to catch later close_all_files case in parent/child. (dtable::vfork_child_fixup): Avoid using cygheap->foo where this should really be using local references. Call close on archetyped handles since the handles haven't had the noninherit flag set. * fhandler_tty.cc (fhandler_tty_slave::close): Remove archetype deletion code. Add defensive error message when DEBUGGING. (fhandler_tty_common::set_close_on_exec): Use more robust method for checking whether to set handles into noninherit if there is an archetype associated with the fhandler.
Diffstat (limited to 'winsup/cygwin/fhandler_tty.cc')
-rw-r--r--winsup/cygwin/fhandler_tty.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 85a4cc7fc..60b12a939 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -616,15 +616,16 @@ fhandler_tty_slave::close ()
fhandler_console::open_fhs, archetype->usecount);
if (--archetype->usecount)
{
+#ifdef DEBUGGING
+ if (archetype->usecount < 0)
+ system_printf ("usecount %d", archetype->usecount);
+#endif
termios_printf ("just exiting because archetype usecount is > 0");
return 0;
}
termios_printf ("closing last open %s handle", pc.dev.name);
- fhandler_tty_slave *arch = (fhandler_tty_slave *) archetype;
- int res = fhandler_tty_common::close ();
- cygheap->fdtab.delete_archetype (arch);
- return res;
+ return fhandler_tty_common::close ();
}
int
@@ -910,7 +911,7 @@ fhandler_tty_slave::dup (fhandler_base *child)
fhandler_console::open_fhs++;
fhandler_tty_slave *arch = (fhandler_tty_slave *) archetype;
*(fhandler_tty_slave *) child = *arch;
- archetype->usecount++;
+ arch->usecount++;
child->usecount = 0;
myself->set_ctty (get_ttyp (), openflags, arch);
termios_printf ("incremented open_fhs %d, archetype usecount %d",
@@ -1331,7 +1332,7 @@ fhandler_pty_master::ptsname ()
void
fhandler_tty_common::set_close_on_exec (int val)
{
- if (get_major () == DEV_TTYS_MAJOR)
+ if (archetype)
set_close_on_exec_flag (val);
else
{