Fix from Robert de Bath which reorders the Windows initialisation
[sgt/putty] / ssh.c
diff --git a/ssh.c b/ssh.c
index b4c634d..750017f 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -4266,13 +4266,13 @@ void sshfwd_unclean_close(struct ssh_channel *c)
     if (ssh->state == SSH_STATE_CLOSED)
        return;
 
-    if (c->closes & CLOSES_SENT_CLOSE)
-        return;
+    if (!(c->closes & CLOSES_SENT_CLOSE)) {
+        pktout = ssh2_pkt_init(SSH2_MSG_CHANNEL_CLOSE);
+        ssh2_pkt_adduint32(pktout, c->remoteid);
+        ssh2_pkt_send(ssh, pktout);
+        c->closes |= CLOSES_SENT_EOF | CLOSES_SENT_CLOSE;
+    }
 
-    pktout = ssh2_pkt_init(SSH2_MSG_CHANNEL_CLOSE);
-    ssh2_pkt_adduint32(pktout, c->remoteid);
-    ssh2_pkt_send(ssh, pktout);
-    c->closes |= CLOSES_SENT_EOF | CLOSES_SENT_CLOSE;
     switch (c->type) {
       case CHAN_X11:
         x11_close(c->u.x11.s);
@@ -4283,6 +4283,7 @@ void sshfwd_unclean_close(struct ssh_channel *c)
         break;
     }
     c->type = CHAN_ZOMBIE;
+
     ssh2_channel_check_close(c);
 }
 
@@ -10036,6 +10037,12 @@ static void ssh_unthrottle(void *handle, int bufsize)
            }
        }
     }
+
+    /*
+     * Now process any SSH connection data that was stashed in our
+     * queue while we were frozen.
+     */
+    ssh_process_queued_incoming_data(ssh);
 }
 
 void ssh_send_port_open(void *channel, char *hostname, int port, char *org)