shared-qmi: ensure cancellation is setup last in the registration wait

register_in_network_cancelled() may be called early if the given
cancellable is already cancelled, and if so, we want it to remove the
timeout and signal handler, which should have been configured before
setting up the cancellation signal handler.
This commit is contained in:
Aleksander Morgado
2023-05-03 14:21:31 +00:00
parent 5bd8bbb408
commit 28eec45dbb

View File

@@ -330,12 +330,6 @@ initiate_network_register_ready (QmiClientNas *client,
* will cancel the others. * will cancel the others.
*/ */
if (ctx->cancellable)
ctx->cancellable_id = g_cancellable_connect (ctx->cancellable,
G_CALLBACK (register_in_network_cancelled),
task,
NULL);
ctx->serving_system_indication_id = g_signal_connect_swapped (client, ctx->serving_system_indication_id = g_signal_connect_swapped (client,
"serving-system", "serving-system",
G_CALLBACK (register_in_network_ready), G_CALLBACK (register_in_network_ready),
@@ -345,6 +339,15 @@ initiate_network_register_ready (QmiClientNas *client,
(GSourceFunc) register_in_network_timeout, (GSourceFunc) register_in_network_timeout,
task); task);
/* The cancellable may already be cancelled, and if so the given callback will be called
* right away. So make sure this cancellable is always configured last, so that it clears the
* timeout or signal handler upon early cancellation. */
if (ctx->cancellable)
ctx->cancellable_id = g_cancellable_connect (ctx->cancellable,
G_CALLBACK (register_in_network_cancelled),
task,
NULL);
out: out:
if (output) if (output)