diff options
author | Christopher Faylor <me@cgf.cx> | 2003-12-10 03:19:19 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2003-12-10 03:19:19 +0000 |
commit | ce40c6baf7c779c6b2a63e41bf21596c96dff506 (patch) | |
tree | 7adc0990c03906310c1d68a519be24d33c3aecf0 /winsup/cygwin/fhandler_tty.cc | |
parent | 7176387b4fadccb76d53f2298cddcca1cad331b5 (diff) | |
download | cygnal-ce40c6baf7c779c6b2a63e41bf21596c96dff506.tar.gz cygnal-ce40c6baf7c779c6b2a63e41bf21596c96dff506.tar.bz2 cygnal-ce40c6baf7c779c6b2a63e41bf21596c96dff506.zip |
* fhandler_tty.cc (fhandler_tty_common::dup): Just copy cygheap->ctty to child
if duping the current ctty.
(fhandler_tty_common::close): Move debugging statement earlier in function.
(fhandler_tty_slave::close): Return success when closing ctty.
* syscalls.cc (close_all_files): Avoid calling fhandler_tty_slave close method
so that open_fhs will not be decremented when closing cygheap ctty.
(setsid): Ditto.
* dcrt0.cc (do_exit): Reorganize to avoid leaving a critical section active
after vfork.
* fhandler.h (fhandler_tty_slave::get_unit): Remove regparm parameter since it
can't work in a virtualized function.
Diffstat (limited to 'winsup/cygwin/fhandler_tty.cc')
-rw-r--r-- | winsup/cygwin/fhandler_tty.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index 3cea6b9d0..34f6a7bff 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -603,7 +603,7 @@ fhandler_tty_slave::close () FreeConsole (); termios_printf ("decremented open_fhs %d", fhandler_console::open_fhs); if (myself->ctty >= 0 && get_io_handle () == cygheap->ctty.get_io_handle ()) - return 1; + return 0; return fhandler_tty_common::close (); } @@ -898,6 +898,14 @@ fhandler_tty_common::dup (fhandler_base *child) fhandler_tty_slave *fts = (fhandler_tty_slave *) child; int errind; +debug_printf ("get_io_handle %p, cygheap->ctty.get_io_handle %p",get_io_handle (),cygheap->ctty.get_io_handle ()); + if (get_io_handle () == cygheap->ctty.get_io_handle ()) + { + *fts = cygheap->ctty; + termios_printf ("duped ctty"); + return 0; + } + fts->tcinit (get_ttyp ()); attach_tty (get_unit ()); @@ -981,7 +989,7 @@ fhandler_tty_common::dup (fhandler_base *child) } if (get_major () == DEV_TTYS_MAJOR) - myself->set_ctty (get_ttyp (), openflags, (fhandler_tty_slave *) this); + myself->set_ctty (get_ttyp (), openflags, fts); return 0; @@ -1147,6 +1155,7 @@ fhandler_pty_master::open (int flags, mode_t) int fhandler_tty_common::close () { + termios_printf ("tty%d <%p,%p> closing", get_unit (), get_handle (), get_output_handle ()); if (output_done_event && !CloseHandle (output_done_event)) termios_printf ("CloseHandle (output_done_event), %E"); if (ioctl_done_event && !CloseHandle (ioctl_done_event)) @@ -1174,10 +1183,8 @@ fhandler_tty_common::close () if (!ForceCloseHandle1 (get_output_handle (), to_pty)) termios_printf ("CloseHandle (get_output_handle ()<%p>), %E", get_output_handle ()); - set_io_handle (NULL); - inuse = NULL; - termios_printf ("tty%d <%p,%p> closed", get_unit (), get_handle (), get_output_handle ()); + set_io_handle (NULL); return 0; } |