From: Simon Tatham Date: Wed, 30 Mar 2005 08:27:54 +0000 (+0000) Subject: <1112163342.018492.101240@f14g2000cwb.googlegroups.com> on X-Git-Tag: r8855-g4f798d~644 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=2b344eb503d9be0fa76f26cc6e07f8673b4945c2;p=PuTTY_svn.git <1112163342.018492.101240@f14g2000cwb.googlegroups.com> on comp.security.ssh contains a Dr Watson log which looks to me as if `unclean-close-crash' occurred due to a rekey timer going off after the session had closed. Hence, ssh2_timer() now avoids doing anything if the session is already closed, and also ssh_do_close() proactively calls expire_timer_context(). Between those I think they ought to solve the problem. git-svn-id: http://svn.tartarus.org/sgt/putty@5564 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/ssh.c b/ssh.c index 8ecd060b..b0cfa11a 100644 --- 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);