From 85c2bc29e618ca805b26a645da70c70426579cda Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Fri, 20 Sep 2013 14:25:34 +0200 Subject: [PATCH] MetaIdleMonitor: protect the monitor instance while calling destroy notify The destroy notify for a DBus watch holds a reference to the IdleMonitor, but the IdleMonitorWatch object doesn't (it knows all watches will be destroyed before the monitor is, so it doesn't need one). This means that the DBus watch reference can be the only one keeping the IdleMonitor alive (expecially true for device idle monitors, which are only used by g-s-d/cursor), and that means that calling the destroy notify freezes the monitor (and the next X calls access garbage). https://bugzilla.gnome.org/show_bug.cgi?id=708420 --- src/core/meta-idle-monitor.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/meta-idle-monitor.c b/src/core/meta-idle-monitor.c index d351e65a9..a516d990c 100644 --- a/src/core/meta-idle-monitor.c +++ b/src/core/meta-idle-monitor.c @@ -287,6 +287,7 @@ idle_monitor_watch_free (MetaIdleMonitorWatch *watch) return; monitor = watch->monitor; + g_object_ref (monitor); if (watch->idle_source_id) { @@ -304,6 +305,7 @@ idle_monitor_watch_free (MetaIdleMonitorWatch *watch) g_hash_table_remove (monitor->alarms, (gpointer) watch->xalarm); } + g_object_unref (monitor); g_slice_free (MetaIdleMonitorWatch, watch); }