From ee5e66d8ffb8750a588db17306acfd3193cc10a9 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 17 Nov 2008 18:36:27 +0000 Subject: [PATCH] Avoid freeing the backend in notify_remote_exit(), since that's called from within a backend function which will expect its own backend pointer to still be valid on return. Instead, move all the real functionality of notify_remote_exit() out into a GTK idle function. git-svn-id: svn://svn.tartarus.org/sgt/putty@8304 cda61777-01e9-0310-a592-d414129be87e --- unix/gtkwin.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/unix/gtkwin.c b/unix/gtkwin.c index 45697889..6510e267 100644 --- a/unix/gtkwin.c +++ b/unix/gtkwin.c @@ -75,6 +75,7 @@ struct gui_data { int mouseptr_visible; int busy_status; guint term_paste_idle_id; + guint term_exit_idle_id; int alt_keycode; int alt_digits; char wintitle[sizeof(((Config *)0)->wintitle)]; @@ -1220,9 +1221,9 @@ void frontend_keypress(void *handle) exit(0); } -void notify_remote_exit(void *frontend) +static gint idle_exit_func(gpointer data) { - struct gui_data *inst = (struct gui_data *)frontend; + struct gui_data *inst = (struct gui_data *)data; int exitcode; if (!inst->exited && @@ -1244,6 +1245,16 @@ void notify_remote_exit(void *frontend) } gtk_widget_show(inst->restartitem); } + + gtk_idle_remove(inst->term_exit_idle_id); + return TRUE; +} + +void notify_remote_exit(void *frontend) +{ + struct gui_data *inst = (struct gui_data *)frontend; + + inst->term_exit_idle_id = gtk_idle_add(idle_exit_func, inst); } static gint timer_trigger(gpointer data) -- 2.11.0