XXX-REMOVE-BEFORE-RELEASE: check docs too
[u/mdw/putty] / ssh.c
diff --git a/ssh.c b/ssh.c
index 72c7c2f..b0cfa11 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -2444,6 +2444,7 @@ static int ssh_do_close(Ssh ssh, int notify_exit)
     struct ssh_channel *c;
 
     ssh->state = SSH_STATE_CLOSED;
+    expire_timer_context(ssh);
     if (ssh->s) {
         sk_close(ssh->s);
         ssh->s = NULL;
@@ -7571,6 +7572,9 @@ static void ssh2_timer(void *ctx, long now)
 {
     Ssh ssh = (Ssh)ctx;
 
+    if (ssh->state == SSH_STATE_CLOSED)
+       return;
+
     if (!ssh->kex_in_progress && ssh->cfg.ssh_rekey_time != 0 &&
        now - ssh->next_rekey >= 0) {
        do_ssh2_transport(ssh, "timeout", -1, NULL);
@@ -8055,6 +8059,7 @@ static void ssh_special(void *handle, Telnet_Special code)
            struct Packet *pktout = ssh2_pkt_init(SSH2_MSG_CHANNEL_EOF);
            ssh2_pkt_adduint32(pktout, ssh->mainchan->remoteid);
            ssh2_pkt_send(ssh, pktout);
+            ssh->send_ok = 0;          /* now stop trying to read from stdin */
        }
        logevent("Sent EOF message");
     } else if (code == TS_PING || code == TS_NOP) {