diff options
author | Thomas Haller <thaller@redhat.com> | 2023-05-17 13:41:45 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-05-17 20:27:56 +0200 |
commit | fc2e425098ffc734710f430e9b14204d57c728fb (patch) | |
tree | 13c742ea4f6cfff548effe398c2d3caac03e725f | |
parent | ca0c68722b0576e843334b4778a5418618504300 (diff) | |
download | NetworkManager-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.c | 37 |
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 * |