From 73f1074272add17aeaaff10c5ec6ab310e513d9d Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 22 Jan 2002 23:34:52 +1100 Subject: [PATCH] - 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@ --- ChangeLog | 6 +++++- channels.c | 4 +++- nchan.c | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index a35c4e287..6fe6d181e 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 03f12d396..73bc10a1a 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 @@ channel_input_ieof(int type, u_int32_t seq, void *ctxt) 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 070f14a7a..fc8e7f18d 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_ieof(Channel *c) 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)