diff options
author | Darren Tucker <dtucker@zip.com.au> | 2009-08-28 11:02:37 +1000 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2009-08-28 11:02:37 +1000 |
commit | 3980b636312516ee823e84e884dadbc86e6795d3 (patch) | |
tree | 9831ee718e444151d57aae8f045db8e4ff04ce76 /channels.c | |
parent | 7d4a2685f78440f09d25bf3fc7236a5f99af208a (diff) |
- (dtucker) [channels.c configure.ac] Bug #1528: skip the tcgetattr call on
the pty master on Solaris, since it never succeeds and can hang if large
amounts of data is sent to the slave (eg a copy-paste). Based on a patch
originally from Doke Scott, ok djm@
Diffstat (limited to 'channels.c')
-rw-r--r-- | channels.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/channels.c b/channels.c index efb04d655..e8b8aa07e 100644 --- a/channels.c +++ b/channels.c | |||
@@ -1653,6 +1653,7 @@ channel_handle_wfd(Channel *c, fd_set *readset, fd_set *writeset) | |||
1653 | } | 1653 | } |
1654 | return -1; | 1654 | return -1; |
1655 | } | 1655 | } |
1656 | #ifndef BROKEN_TCGETATTR_ICANON | ||
1656 | if (compat20 && c->isatty && dlen >= 1 && buf[0] != '\r') { | 1657 | if (compat20 && c->isatty && dlen >= 1 && buf[0] != '\r') { |
1657 | if (tcgetattr(c->wfd, &tio) == 0 && | 1658 | if (tcgetattr(c->wfd, &tio) == 0 && |
1658 | !(tio.c_lflag & ECHO) && (tio.c_lflag & ICANON)) { | 1659 | !(tio.c_lflag & ECHO) && (tio.c_lflag & ICANON)) { |
@@ -1666,6 +1667,7 @@ channel_handle_wfd(Channel *c, fd_set *readset, fd_set *writeset) | |||
1666 | packet_send(); | 1667 | packet_send(); |
1667 | } | 1668 | } |
1668 | } | 1669 | } |
1670 | #endif | ||
1669 | buffer_consume(&c->output, len); | 1671 | buffer_consume(&c->output, len); |
1670 | if (compat20 && len > 0) { | 1672 | if (compat20 && len > 0) { |
1671 | c->local_consumed += len; | 1673 | c->local_consumed += len; |