diff options
author | Christopher Faylor <me@cgf.cx> | 2001-08-25 17:27:31 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2001-08-25 17:27:31 +0000 |
commit | e32b4e81cbab99dc756559f2ba05e61a3f210cde (patch) | |
tree | ccc81044c66df196460c880cc5bc79c60e8ff488 /winsup/cygwin | |
parent | 46f2e780812e5c5aa8214b7fbe33643703734fd5 (diff) | |
download | newlib-e32b4e81cbab99dc756559f2ba05e61a3f210cde.zip newlib-e32b4e81cbab99dc756559f2ba05e61a3f210cde.tar.gz newlib-e32b4e81cbab99dc756559f2ba05e61a3f210cde.tar.bz2 |
* syscalls.cc (check_tty_fds): New function. Check whether there is a fd
referring to pty slave.
(setsid): Don't detach console if the process has a pty slave.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/ChangeLog | 6 | ||||
-rw-r--r-- | winsup/cygwin/syscalls.cc | 21 |
2 files changed, 25 insertions, 2 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 87c7c07..c7c4c1e 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2001-08-24 Kazuhiro Fujieda <fujieda@jaist.ac.jp> + + * syscalls.cc (check_tty_fds): New function. Check whether there is a + fd referring to pty slave. + (setsid): Don't detach console if the process has a pty slave. + Fri Aug 24 8:54:00 2001 Corinna Vinschen <corinna@vinschen.de> * net.cc (free_addr_list): Add define for symmetry. diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 4708cb0..ca76b07 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -65,6 +65,22 @@ close_all_files (void) cygwin_shared->delqueue.process_queue (); } +static BOOL __stdcall +check_ttys_fds (void) +{ + int res = FALSE; + SetResourceLock (LOCK_FD_LIST, WRITE_LOCK | READ_LOCK, "close_all_files"); + fhandler_base *fh; + for (int i = 0; i < (int) cygheap->fdtab.size; i++) + if ((fh = cygheap->fdtab[i]) != NULL && fh->get_device() == FH_TTYS) + { + res = TRUE; + break; + } + ReleaseResourceLock (LOCK_FD_LIST, WRITE_LOCK | READ_LOCK, "close_all_files"); + return res; +} + extern "C" int _unlink (const char *ourname) { @@ -237,10 +253,11 @@ getppid () extern "C" pid_t setsid (void) { - /* FIXME: for now */ if (myself->pgid != _getpid ()) { - if (myself->ctty == TTY_CONSOLE && !cygheap->fdtab.has_console_fds ()) + if (myself->ctty == TTY_CONSOLE && + !cygheap->fdtab.has_console_fds () && + !check_ttys_fds ()) FreeConsole (); myself->ctty = -1; myself->sid = _getpid (); |