diff options
author | Eugene Kilachkoff <[email protected]> | 2014-07-02 16:49:17 +0400 |
---|---|---|
committer | Stefano Karapetsas <[email protected]> | 2014-10-22 11:58:47 +0200 |
commit | 24a360e3924cc3fc0d14999e7a3ecf0d51b3b561 (patch) | |
tree | e93cd53204fbb8137d1e1c9bb4fd11c0f21e8973 /src/daemon/stack.c | |
parent | 8ed79a30694b2249b6a9407d190a68f770c58e12 (diff) | |
download | mate-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.c | 7 |
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); } |