[PATCH] iface-modem-3gpp: ignore initial registration check result when appropriate

Aleksander Morgado aleksander at aleksander.es
Fri Jan 12 11:24:44 UTC 2018


On Fri, Jan 12, 2018 at 8:47 AM, Ben Chan <benchan at chromium.org> wrote:
> When a modem is being enabled, an initial registration check is
> scheduled to determine the current registration state and access
> technology. The initial registration check is performed asynchronously
> and may not complete before the modem state is transitioned to
> 'enabled'. When the modem is disabled shortly afterwards, the
> registration state is transitioned to 'unknown' and the modem state is
> transitioned to 'disabled'. But the completion of the initial
> registration check after that can transition the registration state and
> modem state to a wrong state. This patch addresses the issue by ignoring
> a registration state update if the modem isn't already enabled or being
> enabled.

Pushed, thanks!

> ---
>  src/mm-iface-modem-3gpp.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
> index e1a61ced..f5abc092 100644
> --- a/src/mm-iface-modem-3gpp.c
> +++ b/src/mm-iface-modem-3gpp.c
> @@ -1205,10 +1205,28 @@ update_registration_state (MMIfaceModem3gpp *self,
>          new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
>          new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
>          new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
> +        MMModemState modem_state;
> +
>          /* If already reloading registration info, skip it */
>          if (ctx->reloading_registration_info)
>              return;
>
> +        /* If the modem isn't already enabled or being enabled, this
> +         * registration state update is due to a previously scheduled
> +         * initial registration check when the modem was being enabled.
> +         * We need to ignore it as otherwise it may cause an incorrect
> +         * transition of the registration state and modem state when the
> +         * modem is being disabled. */
> +        modem_state = MM_MODEM_STATE_UNKNOWN;
> +        g_object_get (self,
> +                      MM_IFACE_MODEM_STATE, &modem_state,
> +                      NULL);
> +        if (modem_state < MM_MODEM_STATE_ENABLING) {
> +            mm_dbg ("Modem %s: 3GPP Registration state change ignored as modem isn't enabled",
> +                    g_dbus_object_get_object_path (G_DBUS_OBJECT (self)));
> +            return;
> +        }
> +
>          mm_info ("Modem %s: 3GPP Registration state changed (%s -> registering)",
>                   g_dbus_object_get_object_path (G_DBUS_OBJECT (self)),
>                   mm_modem_3gpp_registration_state_get_string (old_state));
> --
> 2.16.0.rc1.238.g530d649a79-goog
>



-- 
Aleksander
https://aleksander.es


More information about the ModemManager-devel mailing list