From 24a360e3924cc3fc0d14999e7a3ecf0d51b3b561 Mon Sep 17 00:00:00 2001 From: Eugene Kilachkoff Date: Wed, 2 Jul 2014 16:49:17 +0400 Subject: Fix crash when switching monitors When switching monitors AND displaying notifications at the same time, a rare situation might occur when notification window will be added to two or more stacks. One of the stacks will be removed soon enough, but the "destroy" handler will persist and will be triggered when the window disappears. This results in a reference to a freed memory and (usually) a daemon crash, a typical one is https://retrace.fedoraproject.org/faf/reports/359836/ for example. So, the removal handlers referring to a deleted stack must be cancelled prior to removal. Closes https://github.com/mate-desktop/mate-notification-daemon/pull/34 --- src/daemon/stack.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/daemon') diff --git a/src/daemon/stack.c b/src/daemon/stack.c index 1e89e49..97e328a 100644 --- a/src/daemon/stack.c +++ b/src/daemon/stack.c @@ -214,12 +214,19 @@ notify_stack_new (NotifyDaemon *daemon, void notify_stack_destroy (NotifyStack *stack) { + GList* l; + g_assert (stack != NULL); if (stack->update_id != 0) { g_source_remove (stack->update_id); } + for (l = stack->windows; l != NULL; l = l->next) { + GtkWindow *nw = GTK_WINDOW (l->data); + g_signal_handlers_disconnect_by_data(G_OBJECT(nw), stack); + } + g_list_free (stack->windows); g_free (stack); } -- cgit v1.2.1