[gdm/f14/master] Fix crashing in a loop
Ray Strode
rstrode at fedoraproject.org
Mon Sep 13 14:29:17 UTC 2010
commit ca23ea4d1274abdfc074d033ee9b608c09facfdb
Author: Ray Strode <rstrode at redhat.com>
Date: Mon Sep 13 10:27:33 2010 -0400
Fix crashing in a loop
This commit fixes up the last round of changes,
which caused gdm to crash in a loop if the
accounts service was enabled.
fix-user-async-issue.patch | 119 +++++++++++++++++++++++++++++++++++++++++++-
gdm.spec | 7 ++-
2 files changed, 123 insertions(+), 3 deletions(-)
---
diff --git a/fix-user-async-issue.patch b/fix-user-async-issue.patch
index 7e9609b..146f388 100644
--- a/fix-user-async-issue.patch
+++ b/fix-user-async-issue.patch
@@ -876,7 +876,7 @@ index 25951ba..317b721 100644
user->object_path = g_strdup (object_path);
user->accounts_proxy = dbus_g_proxy_new_for_name (user->connection,
-@@ -1021,14 +1031,10 @@ gdm_user_new_from_object_path (const gchar *object_path)
+@@ -1021,14 +1031,9 @@ gdm_user_new_from_object_path (const gchar *object_path)
G_CALLBACK (changed_handler), user, NULL);
if (!update_info (user)) {
@@ -887,7 +887,7 @@ index 25951ba..317b721 100644
- return user;
-
- error:
- g_object_unref (user);
+- g_object_unref (user);
- return NULL;
}
@@ -1063,3 +1063,118 @@ index 6964415..bd36380 100644
--
1.7.2.3
+From c690a9b51dca5700bb5e512e6f2e55d9440a145a Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode at redhat.com>
+Date: Mon, 13 Sep 2010 10:15:34 -0400
+Subject: [PATCH 1/3] Change user manager user weak ref to strong ref
+
+The on_users_loaded function assumes it owns a
+strong reference to the user.
+---
+ gui/simple-greeter/gdm-user-manager.c | 10 +---------
+ 1 files changed, 1 insertions(+), 9 deletions(-)
+
+diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
+index bd36380..305fd93 100644
+--- a/gui/simple-greeter/gdm-user-manager.c
++++ b/gui/simple-greeter/gdm-user-manager.c
+@@ -688,12 +688,6 @@ set_has_multiple_users (GdmUserManager *manager,
+ g_object_notify (G_OBJECT (manager), "has-multiple-users");
+ }
+ }
+-static void
+-on_new_user_destroyed (GdmUserManager *manager,
+- GdmUser *user)
+-{
+- manager->priv->new_users = g_slist_remove (manager->priv->new_users, user);
+-}
+
+ static GdmUser *
+ create_new_user (GdmUserManager *manager)
+@@ -703,11 +697,10 @@ create_new_user (GdmUserManager *manager)
+ user = g_object_new (GDM_TYPE_USER, NULL);
+
+ manager->priv->new_users = g_slist_prepend (manager->priv->new_users, user);
+- g_object_weak_ref (G_OBJECT (user), (GWeakNotify) on_new_user_destroyed, manager);
+
+ g_signal_connect (user, "notify::is-loaded", G_CALLBACK (on_new_user_loaded), manager);
+
+- return user;
++ return g_object_ref (user);
+ }
+
+ static void
+@@ -784,7 +777,6 @@ on_new_user_loaded (GdmUser *user,
+ g_signal_handlers_disconnect_by_func (user, on_new_user_loaded, manager);
+ manager->priv->new_users = g_slist_remove (manager->priv->new_users,
+ user);
+- g_object_weak_unref (G_OBJECT (user), (GWeakNotify) on_new_user_destroyed, manager);
+
+ username = gdm_user_get_user_name (user);
+
+--
+1.7.2.3
+
+
+From 9027a2cb3db2bbf603540b97ee1398a90053a026 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode at redhat.com>
+Date: Mon, 13 Sep 2010 10:19:13 -0400
+Subject: [PATCH 2/3] Don't call update_item_for_user on non-users in userlist
+
+Previously, get_user() it would fail right away and we
+would avoid the call. Now get_user() returns a unloaded
+stub object so we need to avoid calling get_user() in the
+first place.
+---
+ gui/simple-greeter/gdm-user-chooser-widget.c | 8 ++++++++
+ 1 files changed, 8 insertions(+), 0 deletions(-)
+
+diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c
+index 211b033..5aa2cfa 100644
+--- a/gui/simple-greeter/gdm-user-chooser-widget.c
++++ b/gui/simple-greeter/gdm-user-chooser-widget.c
+@@ -235,6 +235,14 @@ on_item_load (GdmChooserWidget *widget,
+ return;
+ }
+
++ if (strcmp (id, GDM_USER_CHOOSER_USER_OTHER) == 0) {
++ return;
++ }
++
++ if (strcmp (id, GDM_USER_CHOOSER_USER_GUEST) == 0) {
++ return;
++ }
++
+ user = gdm_user_manager_get_user (user_chooser->priv->manager, id);
+ if (user != NULL) {
+ update_item_for_user (user_chooser, user);
+--
+1.7.2.3
+
+
+From f274e6bdc79d4b620b62a3aca120426bb24f3977 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstrode at redhat.com>
+Date: Mon, 13 Sep 2010 10:21:57 -0400
+Subject: [PATCH 3/3] Make update_item_for_user a no-op if user unloaded
+
+---
+ gui/simple-greeter/gdm-user-chooser-widget.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c
+index 5aa2cfa..4a79c58 100644
+--- a/gui/simple-greeter/gdm-user-chooser-widget.c
++++ b/gui/simple-greeter/gdm-user-chooser-widget.c
+@@ -185,6 +185,9 @@ update_item_for_user (GdmUserChooserWidget *widget,
+ char *escaped_username;
+ char *escaped_real_name;
+
++ if (!gdm_user_is_loaded (user)) {
++ return;
++ }
+
+ size = get_icon_height_for_widget (GTK_WIDGET (widget));
+ pixbuf = gdm_user_render_icon (user, size);
+--
+1.7.2.3
+
diff --git a/gdm.spec b/gdm.spec
index 5dd3101..1f8d6d3 100644
--- a/gdm.spec
+++ b/gdm.spec
@@ -15,7 +15,7 @@
Summary: The GNOME Display Manager
Name: gdm
Version: 2.31.90
-Release: 5%{?dist}
+Release: 6%{?dist}
Epoch: 1
License: GPLv2+
Group: User Interface/X
@@ -374,6 +374,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/ull || :
%{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
%changelog
+* Mon Sep 13 2010 Ray Strode <rstrode at redhat.com> 2.31.90-6
+- Fix crashing-in-a-loop gdm when accounts service is enabled
+ (caused by -5)
+ Resolves: #632818
+
* Fri Sep 10 2010 Ray Strode <rstrode at redhat.com> 2.31.90-5
- Fix user switch applet when accounts service is disabled
Resolves: #632490
More information about the scm-commits
mailing list