aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem.c
diff options
context:
space:
mode:
authorSebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>2024-08-02 01:54:44 +0200
committerSebastian Krzyszkowiak <dos@dosowisko.net>2024-08-02 03:43:44 +0200
commit93c1e55d36bc3b90a0f38567fcfd5067ecb44351 (patch)
tree4dfff1494a15ded804c3857ef77640f3237aa490 /src/mm-iface-modem.c
parent388e8ea538f9a6b7984cd34b3f66f11a37bf1b25 (diff)
mm-iface-modem: Always check properties for disabling signal polling
MMBroadbandModemQmi only disables signal polling once it successfully sets the indication up. To do that, it sets the properties on MMIfaceModem. This, however, doesn't actually disable polling, as the property values are only checked once in get_private when Private structure hasn't been created yet. Once that happens, only the cached values are ever checked, and there's nothing that would update them. Since there's only one place where these properties are checked, get rid of cached bools in Private structure and instead read the property values directly in periodic_signal_check_step, letting QMI modems actually disable polling at runtime.
Diffstat (limited to 'src/mm-iface-modem.c')
-rw-r--r--src/mm-iface-modem.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index 6d0aa9cd..51c3088c 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -73,9 +73,7 @@ typedef struct {
/* If both signal and access tech polling are either unsupported
* or disabled, we'll automatically stop polling */
gboolean signal_quality_polling_supported;
- gboolean signal_quality_polling_disabled;
gboolean access_technology_polling_supported;
- gboolean access_technology_polling_disabled;
/* Signal quality and access tech polling support */
gboolean signal_check_enabled;
@@ -134,12 +132,6 @@ get_private (MMIfaceModem *self)
priv->signal_quality_polling_supported = (MM_IFACE_MODEM_GET_IFACE (self)->load_signal_quality &&
MM_IFACE_MODEM_GET_IFACE (self)->load_signal_quality_finish);
- /* Get plugin-specific setup for the polling logic */
- g_object_get (self,
- MM_IFACE_MODEM_PERIODIC_SIGNAL_CHECK_DISABLED, &priv->signal_quality_polling_disabled,
- MM_IFACE_MODEM_PERIODIC_ACCESS_TECH_CHECK_DISABLED, &priv->access_technology_polling_disabled,
- NULL);
-
g_object_set_qdata_full (G_OBJECT (self), private_quark, priv, (GDestroyNotify)private_free);
}
@@ -1835,11 +1827,18 @@ periodic_signal_check_step (GTask *task)
MMIfaceModem *self;
Private *priv;
SignalCheckContext *ctx;
+ gboolean signal_quality_polling_disabled;
+ gboolean access_technology_polling_disabled;
self = g_task_get_source_object (task);
priv = get_private (self);
ctx = g_task_get_task_data (task);
+ g_object_get (self,
+ MM_IFACE_MODEM_PERIODIC_SIGNAL_CHECK_DISABLED, &signal_quality_polling_disabled,
+ MM_IFACE_MODEM_PERIODIC_ACCESS_TECH_CHECK_DISABLED, &access_technology_polling_disabled,
+ NULL);
+
switch (ctx->running_step) {
case SIGNAL_CHECK_STEP_FIRST:
ctx->running_step++;
@@ -1847,7 +1846,7 @@ periodic_signal_check_step (GTask *task)
case SIGNAL_CHECK_STEP_SIGNAL_QUALITY:
if (priv->signal_check_enabled && priv->signal_quality_polling_supported &&
- (!priv->signal_check_initial_done || !priv->signal_quality_polling_disabled)) {
+ (!priv->signal_check_initial_done || !signal_quality_polling_disabled)) {
MM_IFACE_MODEM_GET_IFACE (self)->load_signal_quality (
self, (GAsyncReadyCallback)load_signal_quality_ready, task);
return;
@@ -1857,7 +1856,7 @@ periodic_signal_check_step (GTask *task)
case SIGNAL_CHECK_STEP_ACCESS_TECHNOLOGIES:
if (priv->signal_check_enabled && priv->access_technology_polling_supported &&
- (!priv->signal_check_initial_done || !priv->access_technology_polling_disabled)) {
+ (!priv->signal_check_initial_done || !access_technology_polling_disabled)) {
MM_IFACE_MODEM_GET_IFACE (self)->load_access_technologies (
self, (GAsyncReadyCallback)load_access_technologies_ready, task);
return;
@@ -1899,8 +1898,8 @@ periodic_signal_check_step (GTask *task)
* loading are either disabled or unsupported, we'll stop polling completely,
* because they may be loaded asynchronously by unsolicited messages */
if (priv->signal_check_initial_done &&
- (!priv->signal_quality_polling_supported || priv->signal_quality_polling_disabled) &&
- (!priv->access_technology_polling_supported || priv->access_technology_polling_disabled)) {
+ (!priv->signal_quality_polling_supported || signal_quality_polling_disabled) &&
+ (!priv->access_technology_polling_supported || access_technology_polling_disabled)) {
mm_obj_dbg (self, "periodic signal quality and access technology checks not rescheduled: unneeded or unsupported");
periodic_signal_check_disable (self, FALSE);
} else {