aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/fhandler_tty.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_tty.cc')
-rw-r--r--winsup/cygwin/fhandler_tty.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 632e3aa..52b264a 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -711,19 +711,19 @@ fhandler_tty_slave::init (HANDLE f, DWORD a, mode_t)
int ret = open (flags);
- /* We should only grab this when the parent process owns the pgid
- (which could happen when a cygwin process starts a DOS process which
- starts a cygwin process or when we are being started directly from a
- windows process, e.g., from the CMD prompt. */
- if (ret && !cygwin_finished_initializing && !being_debugged ()
- && (myself->ppid == 1 || myself->ppid == tc->getpgid ()))
+ if (ret && !cygwin_finished_initializing && !being_debugged ())
{
/* This only occurs when called from dtable::init_std_file_from_handle
We have been started from a non-Cygwin process. So we should become
tty process group leader.
TODO: Investigate how SIGTTIN should be handled with pure-windows
programs. */
- tc->setpgid (myself->pgid);
+ pinfo p (tc->getpgid ());
+ /* We should only grab this when the process group owner for this
+ tty is a non-cygwin process or we've been started directly
+ from a non-Cygwin process with no Cygwin ancestry. */
+ if (!p || ISSTATE (p, PID_NOTCYGWIN))
+ tc->setpgid (myself->pgid);
}
if (f != INVALID_HANDLE_VALUE)