diff options
author | Christopher Faylor <me@cgf.cx> | 2008-08-28 01:55:19 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2008-08-28 01:55:19 +0400 |
commit | 5f05c64ce4865cf548e2ef91820f022dab90c891 (patch) | |
tree | f05562f313c78f23564715bb4a426d43ac748fd3 /winsup/cygwin | |
parent | cbeb4588298b2ac146207b88bfe66c5415c79535 (diff) |
* fhandler_tty.cc (close_maybe): Check for both types of invalid handle before
attempting CloseHandle.
(fhandler_pty_master::setup): Only set inheritance on pty handles, not tty
handles.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/ChangeLog | 7 | ||||
-rw-r--r-- | winsup/cygwin/fhandler_tty.cc | 14 |
2 files changed, 14 insertions, 7 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 7bacf085a..72f6bbb6a 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2008-08-27 Christopher Faylor <me+cygwin@cgf.cx> + + * fhandler_tty.cc (close_maybe): Check for both types of invalid handle + before attempting CloseHandle. + (fhandler_pty_master::setup): Only set inheritance on pty handles, not + tty handles. + 2008-08-26 Christopher Faylor <me+cygwin@cgf.cx> * shared_info.h (shared_info::create_root_entry): Remove extraneous diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index d4b710d8f..654b92717 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -1339,7 +1339,7 @@ fhandler_tty_master::init_console () #define close_maybe(h) \ do { \ - if (h) \ + if (h && h != INVALID_HANDLE_VALUE) \ CloseHandle (h); \ } while (0) @@ -1356,10 +1356,6 @@ fhandler_pty_master::setup (bool ispty) /* Create communication pipes */ - /* FIXME: should this be sec_none_nih? */ - - /* Create communication pipes */ - char pipename[sizeof("ttyNNNN-from-master")]; __small_sprintf (pipename, "tty%d-from-master", get_unit ()); res = fhandler_pipe::create_selectable (&sec_none_nih, from_master, @@ -1370,7 +1366,9 @@ fhandler_pty_master::setup (bool ispty) errstr = "input pipe"; goto err; } - if (!SetHandleInformation (get_output_handle (), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) + /* Only ptys should create inheritable handles by default. ttys are + parcelled out on an as-needed basis and handle inheritance differently. */ + if (ispty && !SetHandleInformation (get_output_handle (), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) { errstr = "inheritable get_output_handle ()"; goto err; @@ -1388,7 +1386,9 @@ fhandler_pty_master::setup (bool ispty) errstr = "output pipe"; goto err; } - if (!SetHandleInformation (get_io_handle (), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) + /* Only ptys should create inheritable handles by default. ttys are + parcelled out on an as-needed basis and handle inheritance differently. */ + if (ispty && !SetHandleInformation (get_io_handle (), HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT)) { errstr = "inheritable get_io_handle ()"; goto err; |