[Goodies-commits] r7135 - in xfce4-power-manager/trunk: . libxfpm src
Ali Abdallah
aliov at xfce.org
Wed Apr 8 00:23:35 CEST 2009
Author: aliov
Date: 2009-04-07 22:23:35 +0000 (Tue, 07 Apr 2009)
New Revision: 7135
Modified:
xfce4-power-manager/trunk/ChangeLog
xfce4-power-manager/trunk/libxfpm/hal-battery.c
xfce4-power-manager/trunk/libxfpm/hal-power.c
xfce4-power-manager/trunk/src/xfpm-battery.c
xfce4-power-manager/trunk/src/xfpm-supply.c
xfce4-power-manager/trunk/src/xfpm-tray-icon.c
Log:
Fix issue with battery ref count that was causing a crash when hald restarts
Modified: xfce4-power-manager/trunk/ChangeLog
===================================================================
--- xfce4-power-manager/trunk/ChangeLog 2009-04-07 22:15:20 UTC (rev 7134)
+++ xfce4-power-manager/trunk/ChangeLog 2009-04-07 22:23:35 UTC (rev 7135)
@@ -1,4 +1,7 @@
+2009-04-08 0:23 Ali aliov at xfce.org
+ * : Fix issue with battery ref count that was causing a crash when hald restarts
+
2009-04-07 13:23 Ali aliov at xfce.org
* : Implement a clean way to restart HAL related objects when HALD restarts
Modified: xfce4-power-manager/trunk/libxfpm/hal-battery.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-battery.c 2009-04-07 22:15:20 UTC (rev 7134)
+++ xfce4-power-manager/trunk/libxfpm/hal-battery.c 2009-04-07 22:23:35 UTC (rev 7135)
@@ -23,19 +23,9 @@
#endif
#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STRING_H
#include <string.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
#include <glib.h>
#include <glib/gi18n.h>
@@ -58,8 +48,6 @@
struct HalBatteryPrivate
{
- HalManager *manager;
-
/* Properties read-only */
HalDeviceType type;
@@ -242,8 +230,6 @@
battery->priv = HAL_BATTERY_GET_PRIVATE(battery);
- battery->priv->manager = hal_manager_new ();
-
battery->priv->is_present = FALSE;
battery->priv->is_charging = FALSE;
battery->priv->is_discharging = FALSE;
@@ -327,9 +313,6 @@
battery = HAL_BATTERY(object);
- if ( battery->priv->manager )
- g_object_unref(battery->priv->manager);
-
if ( battery->priv->technology )
g_free (battery->priv->technology);
Modified: xfce4-power-manager/trunk/libxfpm/hal-power.c
===================================================================
--- xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-04-07 22:15:20 UTC (rev 7134)
+++ xfce4-power-manager/trunk/libxfpm/hal-power.c 2009-04-07 22:23:35 UTC (rev 7135)
@@ -44,6 +44,9 @@
{
GHashTable *hash ;
HalManager *manager ;
+
+ gulong sig_1;
+ gulong sig_2;
};
enum
@@ -130,7 +133,7 @@
{
g_signal_emit (power, signals[BATTERY_REMOVED], 0, battery);
- g_object_unref(battery );
+ //g_object_unref (battery);
if (!g_hash_table_remove(power->priv->hash, udi))
g_warning ("Unable to removed object from hash\n");
@@ -172,7 +175,7 @@
{
HalBattery *battery = hal_power_get_battery_from_hash (power, udi);
- if (battery )
+ if (battery)
{
hal_power_remove_battery (power, battery , udi);
}
@@ -243,15 +246,14 @@
power->priv = HAL_POWER_GET_PRIVATE(power);
power->priv->manager = hal_manager_new ();
- power->priv->hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ power->priv->hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- g_signal_connect (power->priv->manager, "device-added",
- G_CALLBACK(hal_power_device_added_cb), power);
+ power->priv->sig_1 = g_signal_connect (power->priv->manager, "device-added",
+ G_CALLBACK(hal_power_device_added_cb), power);
- g_signal_connect (power->priv->manager, "device-removed",
- G_CALLBACK(hal_power_device_removed_cb), power);
+ power->priv->sig_2 = g_signal_connect (power->priv->manager, "device-removed",
+ G_CALLBACK(hal_power_device_removed_cb), power);
-
hal_power_get_batteries_internal (power);
}
@@ -262,11 +264,15 @@
power = HAL_POWER(object);
- if (power->priv->hash)
- g_hash_table_unref(power->priv->hash);
+ if ( g_signal_handler_is_connected (power->priv->manager, power->priv->sig_1 ) )
+ g_signal_handler_disconnect (power->priv->manager, power->priv->sig_1 );
+
+ if ( g_signal_handler_is_connected (power->priv->manager, power->priv->sig_2 ) )
+ g_signal_handler_disconnect (power->priv->manager, power->priv->sig_2 );
- if ( power->priv->manager )
- g_object_unref(power->priv->manager);
+ g_hash_table_destroy (power->priv->hash);
+
+ g_object_unref (power->priv->manager);
G_OBJECT_CLASS(hal_power_parent_class)->finalize(object);
}
@@ -302,7 +308,6 @@
for ( i=0; i < g_list_length (list); i++)
{
battery = g_list_nth_data (list, i);
- g_object_ref (battery );
g_ptr_array_add (array, battery);
}
Modified: xfce4-power-manager/trunk/src/xfpm-battery.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-battery.c 2009-04-07 22:15:20 UTC (rev 7134)
+++ xfce4-power-manager/trunk/src/xfpm-battery.c 2009-04-07 22:23:35 UTC (rev 7135)
@@ -68,6 +68,9 @@
gboolean adapter_present;
XfpmBatteryState state;
+
+ gulong sig_1;
+ gulong sig_2;
};
enum
@@ -527,9 +530,9 @@
battery->priv->adapter_present = xfpm_adapter_get_present (battery->priv->adapter);
- g_signal_connect (battery->priv->adapter ,"adapter-changed",
- G_CALLBACK (xfpm_battery_adapter_changed_cb), battery);
-
+ battery->priv->sig_1 = g_signal_connect (battery->priv->adapter ,"adapter-changed",
+ G_CALLBACK (xfpm_battery_adapter_changed_cb), battery);
+
g_signal_connect (battery->priv->icon, "show-information",
G_CALLBACK (xfpm_battery_show_info), battery);
}
@@ -539,7 +542,13 @@
{
XfpmBattery *battery;
battery = XFPM_BATTERY(object);
-
+
+ if ( g_signal_handler_is_connected (battery->priv->adapter, battery->priv->sig_1 ) )
+ g_signal_handler_disconnect (G_OBJECT (battery->priv->adapter), battery->priv->sig_1);
+
+ if ( g_signal_handler_is_connected (battery->priv->conf, battery->priv->sig_2 ) )
+ g_signal_handler_disconnect (G_OBJECT (battery->priv->conf), battery->priv->sig_2);
+
g_object_unref (battery->priv->icon);
g_object_unref (battery->priv->device);
@@ -574,8 +583,8 @@
g_signal_connect (G_OBJECT(battery->priv->device), "battery-changed",
G_CALLBACK(xfpm_battery_device_changed_cb), battery);
- g_signal_connect (G_OBJECT(battery->priv->conf), "tray-icon-settings-changed",
- G_CALLBACK(xfpm_battery_tray_icon_settings_changed), battery);
+ battery->priv->sig_2 = g_signal_connect (G_OBJECT(battery->priv->conf), "tray-icon-settings-changed",
+ G_CALLBACK(xfpm_battery_tray_icon_settings_changed), battery);
return battery;
}
Modified: xfce4-power-manager/trunk/src/xfpm-supply.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-supply.c 2009-04-07 22:15:20 UTC (rev 7134)
+++ xfce4-power-manager/trunk/src/xfpm-supply.c 2009-04-07 22:23:35 UTC (rev 7135)
@@ -394,9 +394,10 @@
if ( battery )
{
TRACE("Removing battery %s", udi);
- if (!g_hash_table_remove(supply->priv->hash, udi))
+ if (!g_hash_table_remove (supply->priv->hash, udi))
g_critical ("Unable to remove battery object from hash");
}
+// g_object_unref (battery);
xfpm_supply_refresh_tray_icon (supply);
}
@@ -415,7 +416,6 @@
static gboolean
xfpm_supply_monitor_start (XfpmSupply *supply)
{
- //FIXME: Check the system formfactor
supply->priv->adapter_present = xfpm_adapter_get_present (supply->priv->adapter);
GPtrArray *array = hal_power_get_batteries (supply->priv->power);
@@ -430,6 +430,12 @@
g_ptr_array_free(array, TRUE);
+ g_signal_connect(supply->priv->power, "battery-added",
+ G_CALLBACK(xfpm_supply_battery_added_cb), supply);
+
+ g_signal_connect(supply->priv->power, "battery-removed",
+ G_CALLBACK(xfpm_supply_battery_removed_cb), supply);
+
return FALSE;
}
@@ -462,14 +468,7 @@
xfpm_supply_monitor_start (supply);
- g_signal_connect(supply->priv->power, "battery-added",
- G_CALLBACK(xfpm_supply_battery_added_cb), supply);
-
- g_signal_connect(supply->priv->power, "battery-removed",
- G_CALLBACK(xfpm_supply_battery_removed_cb), supply);
-
xfpm_supply_refresh_tray_icon (supply);
-
}
gboolean xfpm_supply_on_low_battery (XfpmSupply *supply)
@@ -484,6 +483,7 @@
g_return_if_fail (XFPM_IS_SUPPLY (supply));
g_object_unref (supply->priv->power);
+
g_hash_table_destroy (supply->priv->hash);
supply->priv->power = hal_power_new ();
Modified: xfce4-power-manager/trunk/src/xfpm-tray-icon.c
===================================================================
--- xfce4-power-manager/trunk/src/xfpm-tray-icon.c 2009-04-07 22:15:20 UTC (rev 7134)
+++ xfce4-power-manager/trunk/src/xfpm-tray-icon.c 2009-04-07 22:23:35 UTC (rev 7135)
@@ -62,6 +62,7 @@
GQuark icon_quark;
gboolean info_menu;
gboolean inhibited;
+ gulong sig;
};
enum
@@ -383,8 +384,8 @@
g_signal_connect (tray->priv->icon, "popup-menu",
G_CALLBACK (xfpm_tray_icon_popup_menu_cb), tray);
- g_signal_connect (tray->priv->inhibit, "has-inhibit-changed",
- G_CALLBACK (xfpm_tray_icon_inhibit_changed_cb), tray);
+ tray->priv->sig = g_signal_connect (tray->priv->inhibit, "has-inhibit-changed",
+ G_CALLBACK (xfpm_tray_icon_inhibit_changed_cb), tray);
}
static void
@@ -393,7 +394,10 @@
XfpmTrayIcon *tray;
tray = XFPM_TRAY_ICON(object);
-
+
+ if ( g_signal_handler_is_connected (tray->priv->inhibit, tray->priv->sig ) )
+ g_signal_handler_disconnect (G_OBJECT (tray->priv->inhibit), tray->priv->sig);
+
g_object_unref (tray->priv->icon);
g_object_unref (tray->priv->shutdown);
More information about the Goodies-commits
mailing list