summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-05-17 13:41:45 +0200
committerThomas Haller <thaller@redhat.com>2023-05-17 20:27:56 +0200
commitfc2e425098ffc734710f430e9b14204d57c728fb (patch)
tree13c742ea4f6cfff548effe398c2d3caac03e725f
parentca0c68722b0576e843334b4778a5418618504300 (diff)
downloadNetworkManager-th/cloud-setup-testable.tar.gz
cloud-setup: log about cancellation of provider detectionth/cloud-setup-testable
Otherwise, the logging output is confusing as it's not clear what happened about the provider detection. Also, don't return from _provider_detect() unless all pending callbacks returned. It is ugly to leave callbacks pending, because they will be later dispatched when the caller iterates the GMainContext further. Instead, cancel pending operations bug keep running until we processed all cancellation callbacks.
-rw-r--r--src/nm-cloud-setup/main.c37
1 files changed, 16 insertions, 21 deletions
diff --git a/src/nm-cloud-setup/main.c b/src/nm-cloud-setup/main.c
index 0a0a1ab7e6..881043f526 100644
--- a/src/nm-cloud-setup/main.c
+++ b/src/nm-cloud-setup/main.c
@@ -27,38 +27,35 @@ _provider_detect_cb(GObject *source, GAsyncResult *result, gpointer user_data)
{
gs_unref_object NMCSProvider *provider = NMCS_PROVIDER(source);
gs_free_error GError *error = NULL;
- ProviderDetectData *dd;
+ ProviderDetectData *dd = user_data;
gboolean success;
+ nm_assert(dd->detect_count > 0);
+ dd->detect_count--;
+
success = nmcs_provider_detect_finish(provider, result, &error);
nm_assert(success != (!!error));
- if (nm_utils_error_is_cancelled(error))
- return;
-
- dd = user_data;
-
- nm_assert(dd->detect_count > 0);
- dd->detect_count--;
-
+ if (nm_utils_error_is_cancelled(error)) {
+ _LOGD("provider %s detection cancelled", nmcs_provider_get_name(provider));
+ goto out;
+ }
if (error) {
_LOGI("provider %s not detected: %s", nmcs_provider_get_name(provider), error->message);
- if (dd->detect_count > 0) {
- /* wait longer. */
- return;
- }
-
- _LOGI("no provider detected");
- goto done;
+ goto out;
}
_LOGI("provider %s detected", nmcs_provider_get_name(provider));
dd->provider_result = g_steal_pointer(&provider);
-
-done:
g_cancellable_cancel(dd->cancellable);
- g_main_loop_quit(dd->main_loop);
+
+out:
+ if (dd->detect_count == 0) {
+ if (!dd->provider_result)
+ _LOGI("no provider detected");
+ g_main_loop_quit(dd->main_loop);
+ }
}
static void
@@ -68,8 +65,6 @@ _provider_detect_sigterm_cb(GCancellable *source, gpointer user_data)
g_cancellable_cancel(dd->cancellable);
g_clear_object(&dd->provider_result);
- dd->detect_count = 0;
- g_main_loop_quit(dd->main_loop);
}
static NMCSProvider *