From 409eca86a3fa272454bf1b552dff416febd35ab2 Mon Sep 17 00:00:00 2001 From: jacob Date: Mon, 3 Jan 2011 16:50:41 +0000 Subject: [PATCH] When iterating over all channels for a dead SSH connection, don't miss out those in the CHAN_SOCKDATA_DORMANT state (i.e., local-to-remote forwardings which the SSH server had not yet acknowledged). Marcel Kilgus has been running with the ssh_do_close() patch for nearly two years (*cough*) and reports that it has eliminated frequent 'unclean-close-crash' symptoms for him (due to the unclosed socket generating a pfd_closing() which accessed freed memory), although I've not reproduced that. The patch to ssh_free() is mine and not known to fix any symptoms. git-svn-id: svn://svn.tartarus.org/sgt/putty@9069 cda61777-01e9-0310-a592-d414129be87e --- ssh.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ssh.c b/ssh.c index 0a485da2..a7f1c6b2 100644 --- a/ssh.c +++ b/ssh.c @@ -2862,6 +2862,7 @@ static int ssh_do_close(Ssh ssh, int notify_exit) x11_close(c->u.x11.s); break; case CHAN_SOCKDATA: + case CHAN_SOCKDATA_DORMANT: pfd_close(c->u.pfd.s); break; } @@ -9357,6 +9358,7 @@ static void ssh_free(void *handle) x11_close(c->u.x11.s); break; case CHAN_SOCKDATA: + case CHAN_SOCKDATA_DORMANT: if (c->u.pfd.s != NULL) pfd_close(c->u.pfd.s); break; -- 2.11.0