aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2023-04-10 09:13:37 +0000
committerAleksander Morgado <aleksander@aleksander.es>2023-04-11 10:47:19 +0000
commit4e879cbede19061a13f9cb1f36e23cfd7b1aa78a (patch)
treef622fc52b51cdc990f4a6013374a04e1149760a1 /src
parentc61a7db1b61652d5fc82d4556879af3139821750 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/mm-iface-modem.c25
1 files changed, 20 insertions, 5 deletions
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
@@ -1631,6 +1631,21 @@ 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,
GTask *task)
@@ -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 */