summaryrefslogtreecommitdiff
path: root/src/daemon/stack.c
diff options
context:
space:
mode:
authorEugene Kilachkoff <[email protected]>2014-07-02 16:49:17 +0400
committerStefano Karapetsas <[email protected]>2014-10-22 11:58:47 +0200
commit24a360e3924cc3fc0d14999e7a3ecf0d51b3b561 (patch)
treee93cd53204fbb8137d1e1c9bb4fd11c0f21e8973 /src/daemon/stack.c
parent8ed79a30694b2249b6a9407d190a68f770c58e12 (diff)
downloadmate-notification-daemon-24a360e3924cc3fc0d14999e7a3ecf0d51b3b561.tar.bz2
mate-notification-daemon-24a360e3924cc3fc0d14999e7a3ecf0d51b3b561.tar.xz
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
Diffstat (limited to 'src/daemon/stack.c')
-rw-r--r--src/daemon/stack.c7
1 files changed, 7 insertions, 0 deletions
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);
}