Blame accountsservice-fix-gdm-crash.patch

033a13
From 323707648fdefd11502faf44c2aa41d9b9500078 Mon Sep 17 00:00:00 2001
033a13
From: Iain Lane <iainl@gnome.org>
033a13
Date: Tue, 28 Apr 2020 16:47:00 +0100
033a13
Subject: [PATCH] act-user-manager: Watch for the daemon going away and coming
033a13
 back
033a13
033a13
And set is-loaded accordingly. This causes properties to be invalidated
033a13
on the client side and then get re-fetched when the daemon comes back.
033a13
033a13
https://gitlab.freedesktop.org/accountsservice/accountsservice/issues/55
033a13
---
033a13
 src/libaccountsservice/act-user-manager.c | 21 +++++++++++++++++++++
033a13
 1 file changed, 21 insertions(+)
033a13
033a13
diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c
033a13
index 61a8719..a317507 100644
033a13
--- a/src/libaccountsservice/act-user-manager.c
033a13
+++ b/src/libaccountsservice/act-user-manager.c
033a13
@@ -2298,6 +2298,23 @@ act_user_manager_queue_load (ActUserManager *manager)
033a13
         }
033a13
 }
033a13
 
033a13
+static void
033a13
+on_name_owner_changed (GObject *object,
033a13
+                       GParamSpec *pspec,
033a13
+                       gpointer user_data)
033a13
+{
033a13
+        ActUserManager *manager = ACT_USER_MANAGER (user_data);
033a13
+        GDBusProxy *accounts_proxy = G_DBUS_PROXY (object);
033a13
+        g_autofree gchar *owner = NULL;
033a13
+
033a13
+        g_return_if_fail (ACT_IS_USER_MANAGER (manager));
033a13
+        g_return_if_fail (accounts_proxy != NULL);
033a13
+
033a13
+        owner = g_dbus_proxy_get_name_owner (accounts_proxy);
033a13
+
033a13
+        set_is_loaded (manager, owner != NULL);
033a13
+}
033a13
+
033a13
 static gboolean
033a13
 ensure_accounts_proxy (ActUserManager *manager)
033a13
 {
033a13
@@ -2335,6 +2352,10 @@ ensure_accounts_proxy (ActUserManager *manager)
033a13
                           "user-deleted",
033a13
                           G_CALLBACK (on_user_removed_in_accounts_service),
033a13
                           manager);
033a13
+        g_signal_connect (priv->accounts_proxy,
033a13
+                          "notify::g-name-owner",
033a13
+                          G_CALLBACK (on_name_owner_changed),
033a13
+                          manager);
033a13
 
033a13
         return TRUE;
033a13
 }
033a13
-- 
033a13
GitLab
033a13