about summary refs log tree commit diff
path: root/clients/cli/devices.c
diff options
context:
space:
mode:
authorSebastien Bacher <seb128@ubuntu.com>2018-12-10 21:58:18 +0100
committerSebastien Bacher <seb128@ubuntu.com>2018-12-10 21:58:18 +0100
commit227c401a10a930af6fd5f123aef345fcd130d6aa (patch)
treebf992585295f2c1772ddb0db54569b6d22f36642 /clients/cli/devices.c
parente126f3e804c35480c4f075777430419d6ece23da (diff)
Import Upstream version 1.12.6
Diffstat (limited to 'clients/cli/devices.c')
-rw-r--r--clients/cli/devices.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index be759732..32a42403 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -1906,6 +1906,7 @@ typedef struct {
 	GSList *queue;
 	guint timeout_id;
 	gboolean cmd_disconnect;
+	GCancellable *cancellable;
 } DeviceCbInfo;
 
 static void device_cb_info_finish (DeviceCbInfo *info, NMDevice *device);
@@ -1978,7 +1979,10 @@ device_cb_info_finish (DeviceCbInfo *info, NMDevice *device)
 
 	if (info->timeout_id)
 		g_source_remove (info->timeout_id);
+
 	g_signal_handlers_disconnect_by_func (info->nmc->client, device_removed_cb, info);
+	nm_clear_g_cancellable (&info->cancellable);
+
 	g_slice_free (DeviceCbInfo, info);
 	quit ();
 }
@@ -2155,11 +2159,14 @@ disconnect_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 {
 	NMDevice *device = NM_DEVICE (object);
 	DeviceCbInfo *info = (DeviceCbInfo *) user_data;
-	NmCli *nmc = info->nmc;
+	NmCli *nmc;
 	NMDeviceState state;
 	GError *error = NULL;
 
 	if (!nm_device_disconnect_finish (device, result, &error)) {
+		if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+			return;
+		nmc = info->nmc;
 		g_string_printf (nmc->return_text, _("Error: not all devices disconnected."));
 		g_printerr (_("Error: Device '%s' (%s) disconnecting failed: %s\n"),
 		            nm_device_get_iface (device),
@@ -2169,6 +2176,7 @@ disconnect_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 		nmc->return_value = NMC_RESULT_ERROR_DEV_DISCONNECT;
 		device_cb_info_finish (info, device);
 	} else {
+		nmc = info->nmc;
 		state = nm_device_get_state (device);
 		if (nmc->nowait_flag || state <= NM_DEVICE_STATE_DISCONNECTED) {
 			/* Don't want to wait or device already disconnected */
@@ -2205,6 +2213,7 @@ do_devices_disconnect (NmCli *nmc, int argc, char **argv)
 	info = g_slice_new0 (DeviceCbInfo);
 	info->nmc = nmc;
 	info->cmd_disconnect = TRUE;
+	info->cancellable = g_cancellable_new ();
 	if (nmc->timeout > 0)
 		info->timeout_id = g_timeout_add_seconds (nmc->timeout, device_op_timeout_cb, info);
 
@@ -2222,7 +2231,7 @@ do_devices_disconnect (NmCli *nmc, int argc, char **argv)
 		                  G_CALLBACK (disconnect_state_cb), info);
 
 		/* Now disconnect the device */
-		nm_device_disconnect_async (device, NULL, disconnect_device_cb, info);
+		nm_device_disconnect_async (device, info->cancellable, disconnect_device_cb, info);
 	}
 
 out:
@@ -2248,8 +2257,9 @@ delete_device_cb (GObject *object, GAsyncResult *result, gpointer user_data)
 		nmc->return_value = NMC_RESULT_ERROR_UNKNOWN;
 		device_cb_info_finish (info, device);
 	} else {
-		if (nmc->nowait_flag)
-			device_cb_info_finish (info, device);
+		g_print (_("Device '%s' successfully removed.\n"),
+		         nm_device_get_iface (device));
+		device_cb_info_finish (info, device);
 	}
 }
 
@@ -2277,9 +2287,6 @@ do_devices_delete (NmCli *nmc, int argc, char **argv)
 	if (nmc->timeout > 0)
 		info->timeout_id = g_timeout_add_seconds (nmc->timeout, device_op_timeout_cb, info);
 
-	g_signal_connect (nmc->client, NM_CLIENT_DEVICE_REMOVED,
-	                  G_CALLBACK (device_removed_cb), info);
-
 	nmc->nowait_flag = (nmc->timeout == 0);
 	nmc->should_wait++;