[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