From 8fb456bf440f5cc1801bf06040bc86b930e01069 Mon Sep 17 00:00:00 2001 From: Chow Loong Jin Date: Wed, 27 Jan 2010 02:13:13 +0800 Subject: [PATCH] Make DkpClient a singleton to avoid strange races * debian/patches/02-dkpclient-singleton.patch: - Make DkpClient a singleton to avoid strange races that can arise (LP: #425411) Conflicts: debian/changelog debian/patches/series --- debian/changelog | 8 ++++++ debian/patches/02-dkpclient-singleton.patch | 34 +++++++++++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 43 insertions(+), 0 deletions(-) create mode 100644 debian/patches/02-dkpclient-singleton.patch diff --git a/debian/changelog b/debian/changelog index a4e9245..a1500b6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +devicekit-power (011-1ubuntu2) karmic-proposed; urgency=low + + * debian/patches/02-dkpclient-singleton.patch: + - Make DkpClient a singleton to avoid strange races that can + arise. Patch pulled from upstream Git. (LP: #425411) + + -- Chow Loong Jin Wed, 27 Jan 2010 02:02:00 +0800 + devicekit-power (011-1ubuntu1) karmic; urgency=low * Add 00git-fix-ac-refresh.patch: Properly refresh update-time after AC diff --git a/debian/patches/02-dkpclient-singleton.patch b/debian/patches/02-dkpclient-singleton.patch new file mode 100644 index 0000000..1d418ae --- /dev/null +++ b/debian/patches/02-dkpclient-singleton.patch @@ -0,0 +1,34 @@ +commit b8a200eb481a42adf26d639dbdc2224a6c99f841 +Author: Richard Hughes +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); + } + diff --git a/debian/patches/series b/debian/patches/series index 7778fe8..010add8 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ # Debian patches for DeviceKit-power 00git-fix-ac-refresh.patch +02-dkpclient-singleton.patch -- 1.6.3.3