[gnome-settings-daemon] color: Fix potential crasher



commit ed81228607fbc690a9202af7e6c03f8d73e90f2b
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Sep 21 16:53:04 2012 +0200

    color: Fix potential crasher
    
    If a GFileMonitor event occurs whilst we're stopping the color
    plugin, it's possible that the file events will try to poke at things
    at it shouldn't.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=663710

 plugins/color/gsd-color-manager.c |   28 +++++++++++++++++-----------
 1 files changed, 17 insertions(+), 11 deletions(-)
---
diff --git a/plugins/color/gsd-color-manager.c b/plugins/color/gsd-color-manager.c
index a92b3d1..999b88c 100644
--- a/plugins/color/gsd-color-manager.c
+++ b/plugins/color/gsd-color-manager.c
@@ -1715,6 +1715,15 @@ void
 gsd_color_manager_stop (GsdColorManager *manager)
 {
         g_debug ("Stopping color manager");
+
+        g_clear_object (&manager->priv->settings);
+        g_clear_object (&manager->priv->client);
+        g_clear_object (&manager->priv->profile_store);
+        g_clear_object (&manager->priv->dmi);
+        g_clear_object (&manager->priv->session);
+        g_clear_pointer (&manager->priv->edid_cache, g_hash_table_destroy);
+        g_clear_pointer (&manager->priv->device_assign_hash, g_hash_table_destroy);
+        g_clear_object (&manager->priv->x11_screen);
 }
 
 static void
@@ -2306,17 +2315,14 @@ gsd_color_manager_finalize (GObject *object)
 
         manager = GSD_COLOR_MANAGER (object);
 
-        g_return_if_fail (manager->priv != NULL);
-
-        g_object_unref (manager->priv->settings);
-        g_object_unref (manager->priv->client);
-        g_object_unref (manager->priv->profile_store);
-        g_object_unref (manager->priv->dmi);
-        g_object_unref (manager->priv->session);
-        g_hash_table_destroy (manager->priv->edid_cache);
-        g_hash_table_destroy (manager->priv->device_assign_hash);
-        if (manager->priv->x11_screen != NULL)
-                g_object_unref (manager->priv->x11_screen);
+        g_clear_object (&manager->priv->settings);
+        g_clear_object (&manager->priv->client);
+        g_clear_object (&manager->priv->profile_store);
+        g_clear_object (&manager->priv->dmi);
+        g_clear_object (&manager->priv->session);
+        g_clear_pointer (&manager->priv->edid_cache, g_hash_table_destroy);
+        g_clear_pointer (&manager->priv->device_assign_hash, g_hash_table_destroy);
+        g_clear_object (&manager->priv->x11_screen);
 
         G_OBJECT_CLASS (gsd_color_manager_parent_class)->finalize (object);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]