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-22 17:26:19 +0200
commita34ce19be75772549521664a4f05074753f50b5d (patch)
tree41fd170db518f0185f568edfb0e8c89276a7c2be
parentbc836c399114204e9bc813fdf824f56859cc37c5 (diff)
cloud-setup: log about cancellation of provider detection
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 *