View | Details | Raw Unified | Return to bug 1306 | Differences between
and this patch

Collapse All | Expand All

(-)channels.c (-5 / +4 lines)
Lines 1446-1459 static int Link Here
1446
channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)
1446
channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)
1447
{
1447
{
1448
	char buf[CHAN_RBUF];
1448
	char buf[CHAN_RBUF];
1449
	int len;
1449
	int len, force;
1450
1450
1451
	if (c->rfd != -1 &&
1451
	force = c->isatty && c->detach_close && c->istate != CHAN_INPUT_CLOSED;
1452
	    (c->detach_close || FD_ISSET(c->rfd, readset))) {
1452
	if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) {
1453
		errno = 0;
1453
		errno = 0;
1454
		len = read(c->rfd, buf, sizeof(buf));
1454
		len = read(c->rfd, buf, sizeof(buf));
1455
		if (len < 0 && (errno == EINTR ||
1455
		if (len < 0 && (errno == EINTR || (errno == EAGAIN && !force)))
1456
		    (errno == EAGAIN && !(c->isatty && c->detach_close))))
1457
			return 1;
1456
			return 1;
1458
#ifndef PTY_ZEROREAD
1457
#ifndef PTY_ZEROREAD
1459
		if (len <= 0) {
1458
		if (len <= 0) {

Return to bug 1306