cloud-setup: fix handling cancellation of internal GET operation for EC2 provider

There are two GCancellable at work: one is provided by the user
during nmcs_provider_get_config(), and one is used internally for the
individual HTTP GET requests.

In _get_config_fetch_done_cb(), if the error reason is "cancelled",
then it means that our internal iface_data->cancellable was cancelled.
Probably because an error happend (like a timeout or the user cancelled
the external GCancellable).

In that case, we must not report that the task completed with a
cancellation, because we need to preserve the error that was the
original cause.
This commit is contained in:
Thomas Haller
2020-12-04 11:04:30 +01:00
parent d07cd5dbf2
commit 399c04e810

View File

@@ -235,8 +235,16 @@ _get_config_fetch_done_cb(NMHttpClient *http_client,
}
}
/* If nm_utils_error_is_cancelled(error), then our internal iface_data->cancellable
* was cancelled, because the overall request failed. From point of view of the
* caller, this does not mean that a cancellation happened. It also means, our
* request overall is already about to fail. */
nm_assert(!nm_utils_error_is_cancelled(error) || iface_data->error);
iface_data->n_pending--;
_get_config_task_maybe_return(iface_data, g_steal_pointer(&error));
_get_config_task_maybe_return(iface_data,
nm_utils_error_is_cancelled(error) ? NULL
: g_steal_pointer(&error));
}
static void