From 1df3fbe2db6c972b8e8bdc31b473718a39bf88fa Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sat, 27 Dec 2003 01:59:29 +0000 Subject: [PATCH] * fhandler.h (fhandler_tty_master::fixup_after_fork): Remove declaration. (fhandler_tty_master::fixup_after_exec): Ditto. * fhandler_tty.cc (fhandler_tty_master::init): Fix so that children do not inherit master tty handles. (fhandler_tty_master::fixup_after_fork): Remove, since it was never used. (fhandler_tty_master::fixup_after_exec): Ditto. * pinfo.cc (_pinfo::set_ctty): Increment open_fhs when ctty is set. * cygheap.cc (cygheap_init): Ditto. * syscalls.cc (setsid): *Always* call close on opened ctty since the archetype is associated with the ctty and it counts as an opened handle. * tty.cc (tty::common_init): Don't protect input/output mutex since it confuses subsequent fork/execs when CYGWIN=tty. --- winsup/cygwin/ChangeLog | 18 ++++++++++++++++++ winsup/cygwin/cygheap.cc | 7 +++++++ winsup/cygwin/fhandler.h | 4 +--- winsup/cygwin/fhandler_tty.cc | 15 +-------------- winsup/cygwin/pinfo.cc | 4 +++- winsup/cygwin/syscalls.cc | 3 +-- winsup/cygwin/tty.cc | 4 ++-- winsup/cygwin/tty.h | 2 +- 8 files changed, 34 insertions(+), 23 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index a357ef49f..a63ee6e9d 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,21 @@ +2003-12-26 Christopher Faylor + + * fhandler.h (fhandler_tty_master::fixup_after_fork): Remove + declaration. + (fhandler_tty_master::fixup_after_exec): Ditto. + * fhandler_tty.cc (fhandler_tty_master::init): Fix so that children do + not inherit master tty handles. + (fhandler_tty_master::fixup_after_fork): Remove, since it was never + used. + (fhandler_tty_master::fixup_after_exec): Ditto. + * pinfo.cc (_pinfo::set_ctty): Increment open_fhs when ctty is set. + * cygheap.cc (cygheap_init): Ditto. + * syscalls.cc (setsid): *Always* call close on opened ctty since the + archetype is associated with the ctty and it counts as an opened + handle. + * tty.cc (tty::common_init): Don't protect input/output mutex since it + confuses subsequent fork/execs when CYGWIN=tty. + 2003-12-26 Christopher Faylor * exceptions.cc (try_to_debug): Fix off-by-one problem when resetting diff --git a/winsup/cygwin/cygheap.cc b/winsup/cygwin/cygheap.cc index 6859e4335..16a95f441 100644 --- a/winsup/cygwin/cygheap.cc +++ b/winsup/cygwin/cygheap.cc @@ -212,6 +212,13 @@ cygheap_init () && (set_process_privilege (SE_CREATE_GLOBAL_NAME, true) >= 0 || GetLastError () == ERROR_NO_SUCH_PRIVILEGE) ? "Global\\" : ""); + if (cygheap->ctty) + { + fhandler_console::open_fhs++; + debug_printf ("tty%d, open_fhs %d, arch usecount %d", + cygheap->ctty->get_ttyp ()->ntty, + fhandler_console::open_fhs, cygheap->ctty->usecount); + } } /* Copyright (C) 1997, 2000 DJ Delorie */ diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 3e0f3fb3a..5cbf387da 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -890,7 +890,7 @@ class fhandler_tty_common: public fhandler_termios virtual int dup (fhandler_base *child); - tty *get_ttyp () { return (tty *)tc; } + tty *get_ttyp () { return (tty *) tc; } int close (); void set_close_on_exec (int val); @@ -969,8 +969,6 @@ class fhandler_tty_master: public fhandler_pty_master int init (); int init_console (); void set_winsize (bool); - void fixup_after_fork (HANDLE parent); - void fixup_after_exec (HANDLE); bool is_slow () {return 1;} }; diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index d5cbcadd1..ff1d48f24 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -78,6 +78,7 @@ fhandler_tty_master::init () set_winsize (false); inuse = get_ttyp ()->create_inuse (TTY_MASTER_ALIVE); + set_close_on_exec (true); cygthread *h; h = new cygthread (process_input, cygself, "ttyin"); @@ -1402,20 +1403,6 @@ fhandler_pty_master::set_close_on_exec (int val) } } -void -fhandler_tty_master::fixup_after_fork (HANDLE child) -{ - fhandler_pty_master::fixup_after_fork (child); - console->fixup_after_fork (child); -} - -void -fhandler_tty_master::fixup_after_exec (HANDLE) -{ - console->close (); - init_console (); -} - int fhandler_tty_master::init_console () { diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 581e2fb57..61c74db2a 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -293,7 +293,9 @@ _pinfo::set_ctty (tty_min *tc, int flags, fhandler_tty_slave *arch) if (arch) { arch->usecount++; - debug_printf ("arch usecount for tty%d is %d", tc->ntty, arch->usecount); + fhandler_console::open_fhs++; + debug_printf ("tty%d, open_fhs %d, arch usecount %d", tc->ntty, + fhandler_console::open_fhs, arch->usecount); } } } diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index ab8aeea00..4a8cadefa 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -335,8 +335,7 @@ setsid (void) myself->pgid, myself->ctty, fhandler_console::open_fhs); if (cygheap->ctty) { - if (cygheap->ctty->usecount == 1) - cygheap->ctty->close (); + cygheap->ctty->close (); cygheap->ctty = NULL; } return myself->sid; diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc index 07c7a0a06..7e3aeb9c4 100644 --- a/winsup/cygwin/tty.cc +++ b/winsup/cygwin/tty.cc @@ -457,8 +457,8 @@ tty::common_init (fhandler_pty_master *ptym) return false; } - ProtectHandle1INH (ptym->output_mutex, output_mutex); - ProtectHandle1INH (ptym->input_mutex, input_mutex); + // /* screws up tty master */ ProtectHandle1INH (ptym->output_mutex, output_mutex); + // /* screws up tty master */ ProtectHandle1INH (ptym->input_mutex, input_mutex); winsize.ws_col = 80; winsize.ws_row = 25; diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h index 8153aaf4d..c5d01526f 100644 --- a/winsup/cygwin/tty.h +++ b/winsup/cygwin/tty.h @@ -87,7 +87,7 @@ class fhandler_pty_master; class tty: public tty_min { HANDLE get_event (const char *fmt, BOOL manual_reset = FALSE) - __attribute__ ((regparm (2))); + __attribute__ ((regparm (3))); public: HWND hwnd; /* Console window handle tty belongs to */