]> andersk Git - openssh.git/blobdiff - channels.c
- OpenBSD CVS update:
[openssh.git] / channels.c
index b9b8a2d74d41cd11dfae6e456f83cc4c7ac3e3d3..77818e0ca00bae7a63960d8ed2a2d404929b116f 100644 (file)
@@ -642,6 +642,7 @@ channel_handle_efd(Channel *c, fd_set * readset, fd_set * writeset)
        char buf[16*1024];
        int len;
 
+/** XXX handle drain efd, too */
        if (c->efd != -1) {
                if (c->extended_usage == CHAN_EXTENDED_WRITE &&
                    FD_ISSET(c->efd, writeset) &&
@@ -659,7 +660,12 @@ channel_handle_efd(Channel *c, fd_set * readset, fd_set * writeset)
                        len = read(c->efd, buf, sizeof(buf));
                        debug("channel %d: read %d from efd %d",
                             c->self, len, c->efd);
-                       if (len > 0)
+                       if (len == 0) {
+                               debug("channel %d: closing efd %d",
+                                   c->self, c->efd);
+                               close(c->efd);
+                               c->efd = -1;
+                       } else if (len > 0)
                                buffer_append(&c->extended, buf, len);
                }
        }
This page took 0.032774 seconds and 4 git commands to generate.