Package: devicekit-power
Version: 011-1
Severity: normal
Tags: patch
User: [email protected]
Usertags: origin-ubuntu karmic ubuntu-patch
dkp_client_can_hibernate can return true even if the machine has no swap
partition. When determining the value of its can_hibernate property,
devicekit-power checks if the kernel supports hibernate and whether there is
enough swap space available to perform a hibernate. However, it does not seem
to account for the possibility that a machine may not have a swap partition
even though its kernel supports it. In this case, devicekit-power detects that
the kernel supports hibernate and treats the swap space as completely available
(therefore dkp_client_can_hibernate returns true). The attached patch modifies
devicekit-power to first check if a swap partition exists before calculating
how much is available.
*** /tmp/tmpXwgupz
In Ubuntu, we've applied the attached patch to achieve the following:
* 05_no_swap_no_hibernate.patch: Have dkp_daemon_check_swap function 1st
check if swap exists before determining how much is free
We thought you might be interested in doing the same.
-- System Information:
Debian Release: 5.0
APT prefers jaunty-updates
APT policy: (500, 'jaunty-updates'), (500, 'jaunty-security'), (500,
'jaunty-proposed'), (500, 'jaunty-backports'), (500, 'jaunty')
Architecture: i386 (i686)
Kernel: Linux 2.6.28-17-generic (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -u devicekit-power-011/debian/changelog devicekit-power-011/debian/changelog
diff -u devicekit-power-011/debian/patches/series devicekit-power-011/debian/patches/series
--- devicekit-power-011/debian/patches/series
+++ devicekit-power-011/debian/patches/series
@@ -2,0 +3 @@
+05_no_swap_no_hibernate.patch
only in patch2:
unchanged:
--- devicekit-power-011.orig/debian/patches/05_no_swap_no_hibernate.patch
+++ devicekit-power-011/debian/patches/05_no_swap_no_hibernate.patch
@@ -0,0 +1,33 @@
+Index: devicekit-power-011/src/dkp-daemon.c
+===================================================================
+--- devicekit-power-011.orig/src/dkp-daemon.c 2009-12-15 13:47:52.000000000 -0500
++++ devicekit-power-011/src/dkp-daemon.c 2009-12-15 13:48:57.000000000 -0500
+@@ -139,6 +139,7 @@
+ gboolean ret;
+ guint active = 0;
+ guint swap_free = 0;
++ guint swap_total = 0;
+ guint len;
+ guint i;
+ gfloat percentage = 0.0f;
+@@ -160,14 +161,19 @@
+ if (len > 3) {
+ if (g_strcmp0 (tokens[0], "SwapFree") == 0)
+ swap_free = atoi (tokens[len-2]);
++ if (g_strcmp0 (tokens[0], "SwapTotal") == 0)
++ swap_total = atoi (tokens[len-2]);
+ else if (g_strcmp0 (tokens[0], "Active") == 0)
+ active = atoi (tokens[len-2]);
+ }
+ g_strfreev (tokens);
+ }
+
++ /* first check if we even have swap */
++ if (swap_total == 0)
++ percentage = 100.0f; /* consider all swap space used */
+ /* work out how close to the line we are */
+- if (swap_free > 0 && active > 0)
++ else if (swap_free > 0 && active > 0)
+ percentage = (active * 100) / swap_free;
+ egg_debug ("total swap available %i kb, active memory %i kb (%.1f%%)", swap_free, active, percentage);
+ out: