From 30e8709a43952db775843e3e72c9f51462ffc82e Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 5 May 2013 21:48:06 -0700 Subject: [PATCH] psppire-window: Disconnect signal handlers before unregistering. Otherwise, the call to psppire_window_register_remove() calls back into remove_menuitem() via the "remove" signal, but window->menu referenced in that callback has already been freed. Found by valgrind. --- src/ui/gui/psppire-window.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ui/gui/psppire-window.c b/src/ui/gui/psppire-window.c index c1784ac1f1..23c512d792 100644 --- a/src/ui/gui/psppire-window.c +++ b/src/ui/gui/psppire-window.c @@ -236,6 +236,8 @@ psppire_window_finalize (GObject *object) PsppireWindowRegister *reg = psppire_window_register_new (); + g_signal_handler_disconnect (reg, window->remove_handler); + g_signal_handler_disconnect (reg, window->insert_handler); psppire_window_register_remove (reg, window->list_name); g_free (window->filename); g_free (window->basename); @@ -243,12 +245,6 @@ psppire_window_finalize (GObject *object) g_free (window->description); g_free (window->list_name); - g_signal_handler_disconnect (psppire_window_register_new (), - window->remove_handler); - - g_signal_handler_disconnect (psppire_window_register_new (), - window->insert_handler); - g_hash_table_destroy (window->menuitem_table); if (G_OBJECT_CLASS (parent_class)->finalize) -- 2.30.2