Make sure we do notify_remote_exit(ssh->frontend) _before_
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 5 Mar 2005 17:56:28 +0000 (17:56 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 5 Mar 2005 17:56:28 +0000 (17:56 +0000)
connection_fatal(), since the latter is entitled to destroy the
backend so `ssh' may no longer be valid once it returns.

For the Unix port, switch exit(0) to gtk_main_quit() in
notify_remote_exit(), so that we don't exit before the subsequent
connection_fatal()!

git-svn-id: svn://svn.tartarus.org/sgt/putty@5445 cda61777-01e9-0310-a592-d414129be87e

ssh.c
unix/gtkwin.c

diff --git a/ssh.c b/ssh.c
index 0435dd7..7f3748a 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -2517,6 +2517,9 @@ static int ssh_closing(Plug plug, const char *error_msg, int error_code,
         error_msg = "Server unexpectedly closed network connection";
     }
 
+    if (need_notify)
+        notify_remote_exit(ssh->frontend);
+
     if (error_msg) {
        /* A socket error has occurred. */
        logevent(error_msg);
@@ -2524,8 +2527,6 @@ static int ssh_closing(Plug plug, const char *error_msg, int error_code,
     } else {
         logevent("Server closed network connection");
     }
-    if (need_notify)
-        notify_remote_exit(ssh->frontend);
     return 0;
 }
 
index 043f519..93cc68e 100644 (file)
@@ -1169,7 +1169,7 @@ void notify_remote_exit(void *frontend)
        inst->exited = TRUE;
        if (inst->cfg.close_on_exit == FORCE_ON ||
            (inst->cfg.close_on_exit == AUTO && exitcode == 0))
-           exit(0);                   /* just go. */
+           gtk_main_quit();           /* just go */
        if (inst->ldisc) {
            ldisc_free(inst->ldisc);
            inst->ldisc = NULL;