diff options
author | Thomas Haller <thaller@redhat.com> | 2023-02-27 15:53:06 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2023-03-13 17:13:01 +0100 |
commit | 90f7d7d77b9fbc42ba3ddb736874da88d02fc06b (patch) | |
tree | a0a958478ef913dfbaaa3eb28ce632fe73817e9b /src/nm-cloud-setup | |
parent | 1ee35cb6380d3d8469976b3a31c0d2d1ff99f11d (diff) | |
download | NetworkManager-90f7d7d77b9fbc42ba3ddb736874da88d02fc06b.tar.gz |
cloud-setup: add register-object callback to nmcs_utils_poll()
nmcs_utils_poll() calls nmcs_wait_for_objects_register(), which is
specific to nm-cloud-setup.
nmcs_utils_poll() should move to libnm-glib-aux, so it should not have a
direct dependency on nm-cloud-setup code. Add instead a hook that the
caller can use for registering the object.
Diffstat (limited to 'src/nm-cloud-setup')
-rw-r--r-- | src/nm-cloud-setup/nm-cloud-setup-utils.c | 29 | ||||
-rw-r--r-- | src/nm-cloud-setup/nm-cloud-setup-utils.h | 21 | ||||
-rw-r--r-- | src/nm-cloud-setup/nm-http-client.c | 7 |
3 files changed, 37 insertions, 20 deletions
diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.c b/src/nm-cloud-setup/nm-cloud-setup-utils.c index bdbea7ec73..e9ba410261 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.c +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.c @@ -309,6 +309,11 @@ _poll_cancelled_cb(GObject *object, gpointer user_data) * before the next. Together with @ratelimit_timeout_ms this determines how * frequently we probe. We will wait at least this time between the end of the * previous poll and the next one. + * @probe_register_object_fcn: (allow-none): called by nmcs_utils_poll() + * synchronously, with the new, internal GTask instance. The purpose of this + * callback is a bit obscure, you may want to pass NULL here. It's used by some + * caller to register a weak pointer on the internal GTask instance to track + * the lifetime of the operation. * @probe_start_fcn: used to start a (asynchronous) probe. A probe must be * completed by calling the provided callback. While a probe is in progress, we * will not start another. The function is called the first time on an idle @@ -325,15 +330,16 @@ _poll_cancelled_cb(GObject *object, gpointer user_data) * actions. */ void -nmcs_utils_poll(int poll_timeout_ms, - int ratelimit_timeout_ms, - int sleep_timeout_ms, - NMCSUtilsPollProbeStartFcn probe_start_fcn, - NMCSUtilsPollProbeFinishFcn probe_finish_fcn, - gpointer probe_user_data, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) +nmcs_utils_poll(int poll_timeout_ms, + int ratelimit_timeout_ms, + int sleep_timeout_ms, + NMCSUtilsPollProbeRegisterObjectFcn probe_register_object_fcn, + NMCSUtilsPollProbeStartFcn probe_start_fcn, + NMCSUtilsPollProbeFinishFcn probe_finish_fcn, + gpointer probe_user_data, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) { PollTaskData *poll_task_data; @@ -350,10 +356,11 @@ nmcs_utils_poll(int poll_timeout_ms, .internal_cancellable = g_cancellable_new(), }; - nmcs_wait_for_objects_register(poll_task_data->task); - g_task_set_task_data(poll_task_data->task, poll_task_data, _poll_task_data_free); + if (probe_register_object_fcn) + probe_register_object_fcn((GObject *) poll_task_data->task, probe_user_data); + if (poll_timeout_ms >= 0) { poll_task_data->source_timeout = nm_g_source_attach(nm_g_timeout_source_new(poll_timeout_ms, diff --git a/src/nm-cloud-setup/nm-cloud-setup-utils.h b/src/nm-cloud-setup/nm-cloud-setup-utils.h index fed0f4b6ed..0c7de93565 100644 --- a/src/nm-cloud-setup/nm-cloud-setup-utils.h +++ b/src/nm-cloud-setup/nm-cloud-setup-utils.h @@ -40,6 +40,8 @@ gboolean nmcs_wait_for_objects_iterate_until_done(GMainContext *context, int tim /*****************************************************************************/ +typedef void (*NMCSUtilsPollProbeRegisterObjectFcn)(GObject *object, gpointer user_data); + typedef void (*NMCSUtilsPollProbeStartFcn)(GCancellable *cancellable, gpointer probe_user_data, GAsyncReadyCallback callback, @@ -50,15 +52,16 @@ typedef gboolean (*NMCSUtilsPollProbeFinishFcn)(GObject *source, gpointer probe_user_data, GError **error); -void nmcs_utils_poll(int poll_timeout_ms, - int ratelimit_timeout_ms, - int sleep_timeout_ms, - NMCSUtilsPollProbeStartFcn probe_start_fcn, - NMCSUtilsPollProbeFinishFcn probe_finish_fcn, - gpointer probe_user_data, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); +void nmcs_utils_poll(int poll_timeout_ms, + int ratelimit_timeout_ms, + int sleep_timeout_ms, + NMCSUtilsPollProbeRegisterObjectFcn probe_register_object_fcn, + NMCSUtilsPollProbeStartFcn probe_start_fcn, + NMCSUtilsPollProbeFinishFcn probe_finish_fcn, + gpointer probe_user_data, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); gboolean nmcs_utils_poll_finish(GAsyncResult *result, gpointer *probe_user_data, GError **error); diff --git a/src/nm-cloud-setup/nm-http-client.c b/src/nm-cloud-setup/nm-http-client.c index c78e31a1f8..d00d46609c 100644 --- a/src/nm-cloud-setup/nm-http-client.c +++ b/src/nm-cloud-setup/nm-http-client.c @@ -430,6 +430,12 @@ _poll_req_data_free(gpointer data) } static void +_poll_reg_probe_register_object_fcn(GObject *object, gpointer user_data) +{ + nmcs_wait_for_objects_register(object); +} + +static void _poll_req_probe_start_fcn(GCancellable *cancellable, gpointer probe_user_data, GAsyncReadyCallback callback, @@ -578,6 +584,7 @@ nm_http_client_poll_req(NMHttpClient *self, nmcs_utils_poll(poll_timeout_ms, ratelimit_timeout_ms, 0, + _poll_reg_probe_register_object_fcn, _poll_req_probe_start_fcn, _poll_req_probe_finish_fcn, poll_req_data, |