From: Ben Pfaff Date: Mon, 6 May 2013 04:48:06 +0000 (-0700) Subject: psppire-window: Disconnect signal handlers before unregistering. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30e8709a43952db775843e3e72c9f51462ffc82e;p=pspp 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. --- 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)