[Pkg-utopia-maintainers] Bug#567021: devicekit-power: DkpClient has races in signals when multiple handles are used

Chow Loong Jin hyperair at ubuntu.com
Tue Jan 26 18:35:39 UTC 2010


Package: devicekit-power
Version: 011-1ubuntu1
Severity: normal
Tags: patch


As mentioned in the title, DkpClient has races in signals when multiple handles
are used. One such example of this would be documented in Launchpad bug
#425411[1], where gnome-power-manager ends up suspending twice because if the
power supply status changes prior to resuming.

The supplied patch which was extracted from upstream Git fixes this issue.


[1] https://bugs.launchpad.net/bugs/425411

-- System Information:
Debian Release: squeeze/sid
  APT prefers karmic-updates
  APT policy: (500, 'karmic-updates'), (500, 'karmic-security'), (500, 'karmic-proposed'), (500, 'karmic-backports'), (500, 'karmic')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.33-rc5-hyper2 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=en_SG.UTF-8, LC_CTYPE=en_SG.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages devicekit-power depends on:
ii  libc6                   2.10.1-0ubuntu16 GNU C Library: Shared libraries
ii  libdbus-1-3             1.2.16-0ubuntu9  simple interprocess messaging syst
ii  libdbus-glib-1-2        0.80-4ubuntu1    simple interprocess messaging syst
ii  libdevkit-power-gobject 011-1ubuntu2     abstraction for power management -
ii  libglib2.0-0            2.22.3-0ubuntu1  The GLib library of C routines
ii  libgudev-1.0-0          1:147~-6.1       GObject-based wrapper library for 
ii  libpolkit-gobject-1-0   0.94-1ubuntu1    PolicyKit Authorization API
ii  libusb-0.1-4            2:0.1.12-13      userspace USB programming library

Versions of packages devicekit-power recommends:
ii  pm-utils                  1.2.5-2ubuntu7 utilities and scripts for power ma
ii  policykit-1               0.94-1ubuntu1  framework for managing administrat

devicekit-power suggests no packages.

-- no debconf information
-------------- next part --------------
commit b8a200eb481a42adf26d639dbdc2224a6c99f841
Author: Richard Hughes <richard at hughsie.com>
Date:   Mon Jan 25 14:25:37 2010 +0000

    Make DkpClient a singleton to avoid some weird race conditions

diff --git a/devkit-power-gobject/dkp-client.c b/devkit-power-gobject/dkp-client.c
index feac826..5cef4f9 100644
--- a/devkit-power-gobject/dkp-client.c
+++ b/devkit-power-gobject/dkp-client.c
@@ -74,6 +74,7 @@ enum {
 };
 
 static guint signals [DKP_CLIENT_LAST_SIGNAL] = { 0 };
+static gpointer dkp_client_object = NULL;
 
 G_DEFINE_TYPE (DkpClient, dkp_client, G_TYPE_OBJECT)
 
@@ -734,8 +735,12 @@ dkp_client_finalize (GObject *object)
 DkpClient *
 dkp_client_new (void)
 {
-	DkpClient *client;
-	client = g_object_new (DKP_TYPE_CLIENT, NULL);
-	return DKP_CLIENT (client);
+	if (dkp_client_object != NULL) {
+		g_object_ref (dkp_client_object);
+	} else {
+		dkp_client_object = g_object_new (DKP_TYPE_CLIENT, NULL);
+		g_object_add_weak_pointer (dkp_client_object, &dkp_client_object);
+	}
+	return DKP_CLIENT (dkp_client_object);
 }
 


More information about the Pkg-utopia-maintainers mailing list