Sophie

Sophie

distrib > Mageia > 5 > i586 > by-pkgid > 578220ff64cb3ddf982acff53dff8b22 > files > 7

gnome-settings-daemon-3.14.2-2.mga5.src.rpm

From e4b1d27d5d1df77301a5c018ddfb086e4da9e8e4 Mon Sep 17 00:00:00 2001
From: Rui Matos <tiagomatos@gmail.com>
Date: Fri, 14 Nov 2014 23:27:54 +0100
Subject: [PATCH 2/2] xrandr: Register our DBus API only after all other
 initialization

Otherwise we risk being called and not have all out internal state
ready (e.g. priv->rw_screen being NULL) leading to crashes.

We also need to disown our well known name on stop() since we'll
reaquire it if start() gets called again.

https://bugzilla.gnome.org/show_bug.cgi?id=740151
---
 plugins/xrandr/gsd-xrandr-manager.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index 007beab..67b3ed1 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -129,6 +129,7 @@ static void get_allowed_rotations_for_output (GnomeRRConfig *config,
                                               GnomeRRRotation *out_rotations);
 static void handle_fn_f7 (GsdXrandrManager *mgr, gint64 timestamp);
 static void handle_rotate_windows (GsdXrandrManager *mgr, GnomeRRRotation rotation, gint64 timestamp);
+static void register_manager_dbus (GsdXrandrManager *manager);
 
 G_DEFINE_TYPE (GsdXrandrManager, gsd_xrandr_manager, G_TYPE_OBJECT)
 
@@ -1232,6 +1233,7 @@ on_rr_screen_acquired (GObject      *object,
         manager->priv->settings = g_settings_new (CONF_SCHEMA);
 
         manager_init_devices (manager);
+        register_manager_dbus (manager);
 
         log_close ();
 }
@@ -1283,6 +1285,9 @@ gsd_xrandr_manager_stop (GsdXrandrManager *manager)
                 manager->priv->upower_client = NULL;
         }
 
+        if (manager->priv->name_id != 0)
+                g_bus_unown_name (manager->priv->name_id);
+
         if (manager->priv->introspection_data) {
                 g_dbus_node_info_unref (manager->priv->introspection_data);
                 manager->priv->introspection_data = NULL;
@@ -1341,9 +1346,6 @@ gsd_xrandr_manager_finalize (GObject *object)
 
         gsd_xrandr_manager_stop (manager);
 
-        if (manager->priv->name_id != 0)
-                g_bus_unown_name (manager->priv->name_id);
-
         G_OBJECT_CLASS (gsd_xrandr_manager_parent_class)->finalize (object);
 }
 
@@ -1462,8 +1464,6 @@ gsd_xrandr_manager_new (void)
                 manager_object = g_object_new (GSD_TYPE_XRANDR_MANAGER, NULL);
                 g_object_add_weak_pointer (manager_object,
                                            (gpointer *) &manager_object);
-
-                register_manager_dbus (manager_object);
         }
 
         return GSD_XRANDR_MANAGER (manager_object);
-- 
2.3.2