* fhandler_console.cc (fhandler_console::dup): Only set ctty when we haven't
specifically called setsid. * fhandler_tty.cc (fhandler_pty_slave::dup): Ditto. Also add comment documenting research into rxvt problem. * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Don't check specifically for myself->ctty == -1. Test for > 0 as that is the correct test. (fhandler_termios::sigflush): Ditto.
This commit is contained in:
parent
56bed67046
commit
bd7c945953
|
@ -1,3 +1,14 @@
|
||||||
|
2012-03-03 Christopher Faylor <me.cygwin2012@cgf.cx>
|
||||||
|
|
||||||
|
* fhandler_console.cc (fhandler_console::dup): Only set ctty when we
|
||||||
|
haven't specifically called setsid.
|
||||||
|
* fhandler_tty.cc (fhandler_pty_slave::dup): Ditto. Also add comment
|
||||||
|
documenting research into rxvt problem.
|
||||||
|
* fhandler_termios.cc (fhandler_termios::tcsetpgrp): Don't check
|
||||||
|
specifically for myself->ctty == -1. Test for > 0 as that is the
|
||||||
|
correct test.
|
||||||
|
(fhandler_termios::sigflush): Ditto.
|
||||||
|
|
||||||
2012-03-02 Corinna Vinschen <corinna@vinschen.de>
|
2012-03-02 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* flock.cc (allow_others_to_sync): Reorder conditional expression to
|
* flock.cc (allow_others_to_sync): Reorder conditional expression to
|
||||||
|
|
|
@ -759,7 +759,9 @@ fhandler_console::scroll_screen (int x1, int y1, int x2, int y2, int xn, int yn)
|
||||||
int
|
int
|
||||||
fhandler_console::dup (fhandler_base *child, int flags)
|
fhandler_console::dup (fhandler_base *child, int flags)
|
||||||
{
|
{
|
||||||
myself->set_ctty (this, flags);
|
/* See comments in fhandler_pty_slave::dup */
|
||||||
|
if (myself->ctty != -2)
|
||||||
|
myself->set_ctty (this, flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ fhandler_termios::tcsetpgrp (const pid_t pgid)
|
||||||
int
|
int
|
||||||
fhandler_termios::tcgetpgrp ()
|
fhandler_termios::tcgetpgrp ()
|
||||||
{
|
{
|
||||||
if (myself->ctty != -1 && myself->ctty == tc ()->ntty)
|
if (myself->ctty > 0 && myself->ctty == tc ()->ntty)
|
||||||
return tc ()->pgid;
|
return tc ()->pgid;
|
||||||
set_errno (ENOTTY);
|
set_errno (ENOTTY);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -404,7 +404,7 @@ fhandler_termios::sigflush ()
|
||||||
pid_t
|
pid_t
|
||||||
fhandler_termios::tcgetsid ()
|
fhandler_termios::tcgetsid ()
|
||||||
{
|
{
|
||||||
if (myself->ctty != -1 && myself->ctty == tc ()->ntty)
|
if (myself->ctty > 0 && myself->ctty == tc ()->ntty)
|
||||||
return tc ()->getsid ();
|
return tc ()->getsid ();
|
||||||
set_errno (ENOTTY);
|
set_errno (ENOTTY);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -898,7 +898,16 @@ out:
|
||||||
int
|
int
|
||||||
fhandler_pty_slave::dup (fhandler_base *child, int flags)
|
fhandler_pty_slave::dup (fhandler_base *child, int flags)
|
||||||
{
|
{
|
||||||
myself->set_ctty (this, flags);
|
/* This code was added in Oct 2001 for some undisclosed reason.
|
||||||
|
However, setting the controlling tty on a dup causes rxvt to
|
||||||
|
hang when the parent does a dup since the controlling pgid changes.
|
||||||
|
Specifically testing for -2 (ctty has been setsid'ed) works around
|
||||||
|
this problem. However, it's difficult to see scenarios in which you
|
||||||
|
have a dup'able fd, no controlling tty, and not having run setsid.
|
||||||
|
So, we might want to consider getting rid of the set_ctty in tty-like dup
|
||||||
|
methods entirely at some point */
|
||||||
|
if (myself->ctty != -2)
|
||||||
|
myself->set_ctty (this, flags);
|
||||||
report_tty_counts (child, "duped slave", "");
|
report_tty_counts (child, "duped slave", "");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue