summary refs log tree commit diff
path: root/clients/cli/connections.c
diff options
context:
space:
mode:
Diffstat (limited to 'clients/cli/connections.c')
-rw-r--r--clients/cli/connections.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index c73f96a9..b40d517b 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -2704,6 +2704,7 @@ typedef struct {
 	NmCli *nmc;
 	GSList *queue;
 	guint timeout_id;
+	GCancellable *cancellable;
 } ConnectionCbInfo;
 
 static void connection_cb_info_finish (ConnectionCbInfo *info,
@@ -2773,6 +2774,9 @@ connection_cb_info_finish (ConnectionCbInfo *info, gpointer connection)
 
 	if (info->timeout_id)
 		g_source_remove (info->timeout_id);
+
+	nm_clear_g_cancellable (&info->cancellable);
+
 	g_signal_handlers_disconnect_by_func (info->nmc->client, connection_removed_cb, info);
 	g_slice_free (ConnectionCbInfo, info);
 	quit ();
@@ -8280,6 +8284,8 @@ delete_cb (GObject *con, GAsyncResult *result, gpointer user_data)
 	GError *error = NULL;
 
 	if (!nm_remote_connection_delete_finish (NM_REMOTE_CONNECTION (con), result, &error)) {
+		if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+			return;
 		g_string_printf (info->nmc->return_text, _("Error: not all connections deleted."));
 		g_printerr (_("Error: Connection deletion failed: %s"),
 		            error->message);
@@ -8366,6 +8372,7 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
 	info->nmc = nmc;
 	info->queue = queue;
 	info->timeout_id = g_timeout_add_seconds (nmc->timeout, connection_op_timeout_cb, info);
+	info->cancellable = g_cancellable_new ();
 
 	nmc->nowait_flag = (nmc->timeout == 0);
 	nmc->should_wait++;
@@ -8376,7 +8383,7 @@ do_connection_delete (NmCli *nmc, int argc, char **argv)
 	/* Now delete the connections */
 	for (iter = queue; iter; iter = g_slist_next (iter))
 		nm_remote_connection_delete_async (NM_REMOTE_CONNECTION (iter->data),
-		                                   NULL, delete_cb, info);
+		                                   info->cancellable, delete_cb, info);
 
 finish:
 	if (invalid_cons) {