about summary refs log tree commit diff
path: root/libnm/nm-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm/nm-manager.c')
-rw-r--r--libnm/nm-manager.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/libnm/nm-manager.c b/libnm/nm-manager.c
index c3d0c51d..dc14f83d 100644
--- a/libnm/nm-manager.c
+++ b/libnm/nm-manager.c
@@ -1201,12 +1201,11 @@ free_devices (NMManager *manager, gboolean in_dispose)
 	if (in_dispose) {
 		priv->devices = NULL;
 		priv->all_devices = NULL;
-		return;
+	} else {
+		priv->devices = g_ptr_array_new_with_free_func (g_object_unref);
+		priv->all_devices = g_ptr_array_new_with_free_func (g_object_unref);
 	}
 
-	priv->devices = g_ptr_array_new_with_free_func (g_object_unref);
-	priv->all_devices = g_ptr_array_new_with_free_func (g_object_unref);
-
 	if (all_devices && all_devices->len > 0)
 		devices = all_devices;
 	else if (real_devices && real_devices->len > 0)
@@ -1222,14 +1221,23 @@ free_devices (NMManager *manager, gboolean in_dispose)
 						goto next;
 				}
 			}
-			g_signal_emit (manager, signals[DEVICE_REMOVED], 0, d);
+			if (in_dispose)
+				device_removed (manager, d);
+			else
+				g_signal_emit (manager, signals[DEVICE_REMOVED], 0, d);
 next:
 			;
 		}
 	}
 	if (devices) {
-		for (i = 0; i < devices->len; i++)
-			g_signal_emit (manager, signals[DEVICE_REMOVED], 0, devices->pdata[i]);
+		for (i = 0; i < devices->len; i++) {
+			NMDevice *d = devices->pdata[i];
+
+			if (in_dispose)
+				device_removed (manager, d);
+			else
+				g_signal_emit (manager, signals[DEVICE_REMOVED], 0, d);
+		}
 	}
 }