Fixed deinitialization of DBus connection.
authorRoman Moravcik <roman.moravcik@gmail.com>
Sat, 3 Apr 2010 06:51:50 +0000 (08:51 +0200)
committerRoman Moravcik <roman.moravcik@gmail.com>
Sat, 3 Apr 2010 06:51:50 +0000 (08:51 +0200)
src/flashlight_applet.c

index cb9280a..c907c1c 100644 (file)
@@ -51,6 +51,7 @@ struct _FlashlightPluginPrivate
        guint status_timer;
 
        FlashlightContext_t *flashlight;
+       DBusConnection *dbus_connection;
        LibHalContext *hal;
 };
 
@@ -260,7 +261,7 @@ flashlight_status_plugin_init (FlashlightPlugin *plugin)
 
        /* initialize dbus */
        dbus_error_init (&error);
-       dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
+       priv->dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error);
        if (dbus_error_is_set (&error)) {
                g_critical ("flashlight_status_plugin_init: Could not get the system DBus connection, %s",
                            error.message);
@@ -281,7 +282,7 @@ flashlight_status_plugin_init (FlashlightPlugin *plugin)
                return;
        }
 
-       libhal_ctx_set_dbus_connection (priv->hal, dbus_connection);
+       libhal_ctx_set_dbus_connection (priv->hal, priv->dbus_connection);
        libhal_ctx_set_user_data (priv->hal, plugin);
        libhal_ctx_set_device_property_modified (priv->hal,
                                                 flashlight_status_plugin_on_hal_property_modified);
@@ -330,6 +331,12 @@ flashlight_status_plugin_finalize (GObject *object)
        }
        priv->hal = NULL;
 
+       /* unreference dbus connection */
+       if (priv->dbus_connection) {
+               dbus_connection_unref (priv->dbus_connection);
+       }
+       priv->dbus_connection = NULL;
+
        /* cancel status timer */
        if (priv->status_timer) {
                g_source_remove (priv->status_timer);