- markus@cvs.openbsd.org 2002/01/21 23:27:10
     [channels.c nchan.c]
     cleanup channels faster if the are empty and we are in drain-state; ok deraadt@
diff --git a/ChangeLog b/ChangeLog
index a35c4e2..6fe6d18 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -219,6 +219,10 @@
      [cipher.c compat.c myproposal.h]
      remove "rijndael-*", just use "aes-" since this how rijndael is called
      in the drafts; ok stevesk@
+   - markus@cvs.openbsd.org 2002/01/21 23:27:10
+     [channels.c nchan.c]
+     cleanup channels faster if the are empty and we are in drain-state; 
+     ok deraadt@
 
 20020121
  - (djm) Rework ssh-rand-helper:
@@ -7366,4 +7370,4 @@
  - Wrote replacements for strlcpy and mkdtemp
  - Released 1.0pre1
 
-$Id: ChangeLog,v 1.1784 2002/01/22 12:34:35 djm Exp $
+$Id: ChangeLog,v 1.1785 2002/01/22 12:34:52 djm Exp $
diff --git a/channels.c b/channels.c
index 03f12d3..73bc10a 100644
--- a/channels.c
+++ b/channels.c
@@ -39,7 +39,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: channels.c,v 1.160 2002/01/16 13:17:51 markus Exp $");
+RCSID("$OpenBSD: channels.c,v 1.161 2002/01/21 23:27:10 markus Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -1793,6 +1793,8 @@
 	if (c->force_drain && c->istate == CHAN_INPUT_OPEN) {
 		debug("channel %d: FORCE input drain", c->self);
 		c->istate = CHAN_INPUT_WAIT_DRAIN;
+		if (buffer_len(&c->input) == 0)
+			chan_ibuf_empty(c);
 	}
 
 }
diff --git a/nchan.c b/nchan.c
index 070f14a..fc8e7f1 100644
--- a/nchan.c
+++ b/nchan.c
@@ -23,7 +23,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: nchan.c,v 1.43 2002/01/14 13:57:03 markus Exp $");
+RCSID("$OpenBSD: nchan.c,v 1.44 2002/01/21 23:27:10 markus Exp $");
 
 #include "ssh1.h"
 #include "ssh2.h"
@@ -364,6 +364,9 @@
 		chan_rcvd_eof2(c);
 	else
 		chan_rcvd_ieof1(c);
+	if (c->ostate == CHAN_OUTPUT_WAIT_DRAIN &&
+	    buffer_len(&c->output) == 0)
+		chan_obuf_empty(c);
 }
 void
 chan_rcvd_oclose(Channel *c)