[network-manager-netbook] Disconnect signal handlers when a device handler is disposed.



commit c04fc305a14f823265b4dc5246f60f011c765889
Author: Tambet Ingo <tambet gmail com>
Date:   Tue May 26 09:41:07 2009 +0300

    Disconnect signal handlers when a device handler is disposed.
---
 src/nmn-device-handler.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/nmn-device-handler.c b/src/nmn-device-handler.c
index 846da22..ebf153a 100644
--- a/src/nmn-device-handler.c
+++ b/src/nmn-device-handler.c
@@ -27,6 +27,8 @@ typedef struct {
     NMDevice *device;
     GSList *items;
     gboolean started;
+    gulong user_connection_added_id;
+    gulong system_connection_added_id;
 
     gboolean disposed;
 } NmnDeviceHandlerPrivate;
@@ -65,7 +67,8 @@ nmn_device_handler_start (NmnDeviceHandler *self)
 
     settings = nmn_nm_data_get_user_settings (priv->nm_data);
     if (settings) {
-        g_signal_connect (settings, "new-connection", G_CALLBACK (connection_added), self);
+        priv->user_connection_added_id = g_signal_connect (settings, "new-connection",
+                                                           G_CALLBACK (connection_added), self);
 
         list = nm_settings_list_connections (settings);
         g_slist_foreach (list, add_one_connection, self);
@@ -74,7 +77,8 @@ nmn_device_handler_start (NmnDeviceHandler *self)
 
     settings = nmn_nm_data_get_system_settings (priv->nm_data);
     if (settings) {
-        g_signal_connect (settings, "new-connection", G_CALLBACK (connection_added), self);
+        priv->system_connection_added_id = g_signal_connect (settings, "new-connection",
+                                                             G_CALLBACK (connection_added), self);
 
         list = nm_settings_list_connections (settings);
         g_slist_foreach (list, add_one_connection, self);
@@ -245,10 +249,17 @@ static void
 dispose (GObject *object)
 {
     NmnDeviceHandlerPrivate *priv = GET_PRIVATE (object);
+    NMSettings *settings;
 
     if (priv->disposed)
         return;
 
+    settings = nmn_nm_data_get_user_settings (priv->nm_data);
+    g_signal_handler_disconnect (settings, priv->user_connection_added_id);
+
+    settings = nmn_nm_data_get_system_settings (priv->nm_data);
+    g_signal_handler_disconnect (settings, priv->system_connection_added_id);
+
     g_slist_foreach (priv->items, (GFunc) g_object_unref, NULL);
     g_slist_free (priv->items);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]