Package: libaccountsservice0
Followup-For: Bug #673185

Dear all,

I got fed up with g-s crashing away happily in permanent succession,
so I took the fix from the upstream bug tracker and build a 
package -3.1 (NMU).

According to NMU procedure (developers reference 5.11.1)
* it fixes RC bugs
* reported: 2012-05-16 (about 1 month ago)
* bug from upstream bug tracker
* sending an email to BTS now

If the maintainers of these packages plan to upload fixes soon, I will
upload the package within the next 3 days to the DELAYED/2 queue.

(According to reference a zero day upload would be fine: only rc bug,
older than 7 days, no reaction of maintainer for the last 7 days - last
email 4 June).

Maintainers, if you plan to do something else, please let me know
by personal email. Thanks.

I attach the deb diff from 3 to 3.1 in this email.

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (499, 'unstable'), (101, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 3.5.0-rc2+ (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages libaccountsservice0 depends on:
ii  libc6         2.13-33
ii  libglib2.0-0  2.32.3-1

libaccountsservice0 recommends no packages.

libaccountsservice0 suggests no packages.

-- no debconf information
diff -Nru accountsservice-0.6.21/debian/changelog accountsservice-0.6.21/debian/changelog
--- accountsservice-0.6.21/debian/changelog	2012-06-07 22:09:29.000000000 +0900
+++ accountsservice-0.6.21/debian/changelog	2012-06-13 08:25:31.000000000 +0900
@@ -1,3 +1,12 @@
+accountsservice (0.6.21-3.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * add upstream patch to fix permanent segfaults of gnome-shell
+    patch: lib-manage-pending-consolekit-calls-with-cancellab
+    (Closes: #673185)
+
+ -- Norbert Preining <prein...@debian.org>  Wed, 13 Jun 2012 08:24:27 +0900
+
 accountsservice (0.6.21-3) unstable; urgency=low
 
   * Strip SystemdService out of org.freedesktop.Accounts.service
diff -Nru accountsservice-0.6.21/debian/patches/lib-manage-pending-consolekit-calls-with-cancellab accountsservice-0.6.21/debian/patches/lib-manage-pending-consolekit-calls-with-cancellab
--- accountsservice-0.6.21/debian/patches/lib-manage-pending-consolekit-calls-with-cancellab	1970-01-01 09:00:00.000000000 +0900
+++ accountsservice-0.6.21/debian/patches/lib-manage-pending-consolekit-calls-with-cancellab	2012-06-13 08:24:19.000000000 +0900
@@ -0,0 +1,93 @@
+From 45d55f7f0033a34aa12d0b7007607ae39b929676 Mon Sep 17 00:00:00 2001
+From: Ray Strode <rstr...@redhat.com>
+Date: Mon, 21 May 2012 17:13:09 -0400
+Subject: [PATCH] lib: manage pending consolekit calls with cancellable
+
+Pending NewSession objects can disappear just as quickly
+as they appear in response to ConsoleKit signals.  If
+we're in the middle of talking to ConsoleKit when an
+object disappears and is subsequently freed, then we'll
+still try to access it from the reply callback.
+
+This commit cancels any pending messages to the consolekit
+daemon, when the session goes away.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=50112
+---
+ src/libaccountsservice/act-user-manager.c |   21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+Index: accountsservice-0.6.21/src/libaccountsservice/act-user-manager.c
+===================================================================
+--- accountsservice-0.6.21.orig/src/libaccountsservice/act-user-manager.c	2012-05-18 02:27:02.000000000 +0900
++++ accountsservice-0.6.21/src/libaccountsservice/act-user-manager.c	2012-06-13 08:23:47.840464058 +0900
+@@ -104,6 +104,7 @@
+         ActUserManagerNewSessionState    state;
+         char                            *id;
+         ConsoleKitSession               *proxy;
++        GCancellable                    *cancellable;
+         uid_t                            uid;
+         char                            *x11_display;
+ } ActUserManagerNewSession;
+@@ -962,6 +963,13 @@
+ 
+         manager = new_session->manager;
+ 
++        if (new_session->cancellable != NULL &&
++            !g_cancellable_is_cancelled (new_session->cancellable)) {
++                g_cancellable_cancel (new_session->cancellable);
++                g_object_unref (new_session->cancellable);
++                new_session->cancellable = NULL;
++        }
++
+         manager->priv->new_sessions = g_slist_remove (manager->priv->new_sessions,
+                                                       new_session);
+ 
+@@ -1017,6 +1025,10 @@
+         GError            *error = NULL;
+         guint              uid;
+ 
++        if (new_session->cancellable == NULL || g_cancellable_is_cancelled (new_session->cancellable)) {
++                return;
++        }
++
+         if (!console_kit_session_call_get_unix_user_finish (proxy, &uid, result, &error)) {
+                 if (error != NULL) {
+                         g_debug ("Failed to get uid of session '%s': %s",
+@@ -1076,7 +1088,7 @@
+         g_assert (new_session->proxy != NULL);
+ 
+         console_kit_session_call_get_unix_user (new_session->proxy,
+-                                                NULL,
++                                                new_session->cancellable,
+                                                 on_get_unix_user_finished,
+                                                 new_session);
+ }
+@@ -1216,6 +1228,10 @@
+         GError            *error = NULL;
+         char              *x11_display;
+ 
++        if (new_session->cancellable == NULL || g_cancellable_is_cancelled (new_session->cancellable)) {
++                return;
++        }
++
+         if (!console_kit_session_call_get_x11_display_finish (proxy, &x11_display, result, &error)) {
+                 if (error != NULL) {
+                         g_debug ("Failed to get the x11 display of session '%s': %s",
+@@ -1303,7 +1319,7 @@
+         g_assert (new_session->proxy != NULL);
+ 
+         console_kit_session_call_get_x11_display (new_session->proxy,
+-                                                  NULL,
++                                                  new_session->cancellable,
+                                                   on_get_x11_display_finished,
+                                                   new_session);
+ }
+@@ -1392,6 +1408,7 @@
+         new_session->manager = g_object_ref (manager);
+         new_session->id = g_strdup (session_id);
+         new_session->state = ACT_USER_MANAGER_NEW_SESSION_STATE_UNLOADED + 1;
++        new_session->cancellable = g_cancellable_new ();
+ 
+         manager->priv->new_sessions = g_slist_prepend (manager->priv->new_sessions,
+                                                        new_session);
diff -Nru accountsservice-0.6.21/debian/patches/series accountsservice-0.6.21/debian/patches/series
--- accountsservice-0.6.21/debian/patches/series	2012-06-04 18:19:14.000000000 +0900
+++ accountsservice-0.6.21/debian/patches/series	2012-06-13 08:23:06.000000000 +0900
@@ -5,3 +5,4 @@
 1001-buildsystem.patch
 2001-filtering_out_users.patch
 2002-disable_systemd.patch
+lib-manage-pending-consolekit-calls-with-cancellab

Reply via email to