|
Lines 1562-1567
Link Here
|
| 1562 |
channel_handler(channel_post, readset, writeset); |
1562 |
channel_handler(channel_post, readset, writeset); |
| 1563 |
} |
1563 |
} |
| 1564 |
|
1564 |
|
|
|
1565 |
#define CHANNEL_EFD_ALIVE(c) \ |
| 1566 |
(compat20 && c->extended_usage == CHAN_EXTENDED_READ && \ |
| 1567 |
(c->efd != -1 || buffer_len(&c->extended) > 0)) |
| 1568 |
|
| 1565 |
|
1569 |
|
| 1566 |
/* If there is data to send to the connection, enqueue some of it now. */ |
1570 |
/* If there is data to send to the connection, enqueue some of it now. */ |
| 1567 |
|
1571 |
|
|
Lines 1634-1640
Link Here
|
| 1634 |
* input-buffer is empty and read-socket shutdown: |
1638 |
* input-buffer is empty and read-socket shutdown: |
| 1635 |
* tell peer, that we will not send more data: send IEOF |
1639 |
* tell peer, that we will not send more data: send IEOF |
| 1636 |
*/ |
1640 |
*/ |
| 1637 |
chan_ibuf_empty(c); |
1641 |
if (CHANNEL_EFD_ALIVE(c)) |
|
|
1642 |
debug2("channel %d: ibuf_empty delayed efd %d/(%d)", |
| 1643 |
c->self, c->efd, buffer_len(&c->extended)); |
| 1644 |
else |
| 1645 |
chan_ibuf_empty(c); |
| 1638 |
} |
1646 |
} |
| 1639 |
/* Send extended data, i.e. stderr */ |
1647 |
/* Send extended data, i.e. stderr */ |
| 1640 |
if (compat20 && |
1648 |
if (compat20 && |
|
Lines 1726-1731
Link Here
|
| 1726 |
log("channel %d: ext data for non open", id); |
1734 |
log("channel %d: ext data for non open", id); |
| 1727 |
return; |
1735 |
return; |
| 1728 |
} |
1736 |
} |
|
|
1737 |
if (c->ostate == CHAN_OUTPUT_CLOSED) |
| 1738 |
debug2("channel %d: ext data for OUTPUT_CLOSED [error]", id); |
| 1729 |
tcode = packet_get_int(); |
1739 |
tcode = packet_get_int(); |
| 1730 |
if (c->efd == -1 || |
1740 |
if (c->efd == -1 || |
| 1731 |
c->extended_usage != CHAN_EXTENDED_WRITE || |
1741 |
c->extended_usage != CHAN_EXTENDED_WRITE || |