From 7c7ef60a26de4a1f319abf10cf10606d630fbccc 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 0bfcae0..3805900 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