From 4e879cbede19061a13f9cb1f36e23cfd7b1aa78a Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 10 Apr 2023 09:13:37 +0000 Subject: iface-modem: fix incorrectly halted periodic signal checks Whenever an explicit signal refresh was requested we would flag the check as ongoing but never reset the flag, so it would never attempt to reload it again. Fixes 0080ed612d0a412c5794059a93ed30ca07103b79 Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/702 --- src/mm-iface-modem.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 01c5f69b..32a5610e 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -1630,6 +1630,21 @@ static void periodic_signal_check_disable (MMIfaceModem *self, static gboolean periodic_signal_check_run (MMIfaceModem *self); static void periodic_signal_check_step (GTask *task); +static void +periodic_signal_check_complete (GTask *task) +{ + MMIfaceModem *self; + Private *priv; + + self = g_task_get_source_object (task); + priv = get_private (self); + g_assert (priv->signal_check_running); + priv->signal_check_running = FALSE; + + g_task_return_boolean (task, TRUE); + g_object_unref (task); +} + static void load_access_technologies_ready (MMIfaceModem *self, GAsyncResult *res, @@ -1739,8 +1754,7 @@ periodic_signal_check_step (GTask *task) * do anything else. */ if (!priv->signal_check_enabled) { mm_obj_dbg (self, "periodic signal quality and access technology checks not rescheduled: disabled"); - g_task_return_boolean (task, FALSE); - g_object_unref (task); + periodic_signal_check_complete (task); return; } @@ -1781,8 +1795,7 @@ periodic_signal_check_step (GTask *task) self); } - g_task_return_boolean (task, TRUE); - g_object_unref (task); + periodic_signal_check_complete (task); return; default: @@ -1808,6 +1821,9 @@ periodic_signal_check_run (MMIfaceModem *self) ctx->access_technologies_mask = MM_MODEM_ACCESS_TECHNOLOGY_ANY; g_task_set_task_data (task, ctx, (GDestroyNotify) g_free); + g_assert (!priv->signal_check_running); + priv->signal_check_running = TRUE; + periodic_signal_check_step (task); /* Reset the source id as we're removing the timeout source */ @@ -1836,7 +1852,6 @@ mm_iface_modem_refresh_signal (MMIfaceModem *self) } mm_obj_dbg (self, "periodic signal check refresh requested"); - priv->signal_check_running = TRUE; /* Remove the scheduled timeout as we're going to refresh * right away */ -- cgit v1.2.3-70-g09d2