[PATCH] base-bearer: use an initial longer timeout for connectivity check

Colin Helliwell colin.helliwell at ln-systems.com
Mon Jun 5 11:57:25 UTC 2017


> On 02 June 2017 at 11:21 Aleksander Morgado <aleksander at aleksander.es> wrote:
> 
> If we ask too quick for the PDP context status after a successful
> connection attempt reported by the modem, we may find it still flagged
> as inactive if the modem is still busy setting up the PPP session.
> 
> Do an explicit longer initial timeout before we run the first check,
> and after that one setup the additional checks at a higher rate.
> 
> Reported-by: Colin Helliwell <colin.helliwell at ln-systems.com>
> 
> ---
> 
> Hey Colin,
> 
> What do you think of this patch? Could you see if it helps with the issue you had?
> 
> Cheers!

It's proving hard to contrive the ppp to take longer than usual, but certainly I see the 30s interval before the first 'CGACT?', and 5s subsequently.

> 
> ---
>  src/mm-base-bearer.c | 33 ++++++++++++++++++++++++++-------
>  1 file changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c
> index 02084dff..5285e4f2 100644
> --- a/src/mm-base-bearer.c
> +++ b/src/mm-base-bearer.c
> @@ -46,7 +46,9 @@
> 
> #define BEARER_STATS_UPDATE_TIMEOUT 30
> 
> -#define BEARER_CONNECTION_MONITOR_TIMEOUT 5
> +/* Initial connectivity check after 30s, then each 5s */
> +#define BEARER_CONNECTION_MONITOR_INITIAL_TIMEOUT 30
> +#define BEARER_CONNECTION_MONITOR_TIMEOUT 5
> 
> G_DEFINE_TYPE (MMBaseBearer, mm_base_bearer, MM_GDBUS_TYPE_BEARER_SKELETON)
> 
> @@ -191,12 +193,29 @@ connection_monitor_cb (MMBaseBearer *self)
>  {
>  /* If the implementation knows how to load connection status, run it */
>  MM_BASE_BEARER_GET_CLASS (self)->load_connection_status (
> 
> *   self,
> *   (GAsyncReadyCallback)load_connection_status_ready,
> *   NULL);
> 
> *   self,
> *   (GAsyncReadyCallback)load_connection_status_ready,
> *   NULL);
> return G_SOURCE_CONTINUE;
> }
> 
> +static gboolean
> +initial_connection_monitor_cb (MMBaseBearer *self)
> +{
> 
> *   MM_BASE_BEARER_GET_CLASS (self)->load_connection_status (
> *   self,
> *   (GAsyncReadyCallback)load_connection_status_ready,
> *   NULL);
> +
> *   /* Add new monitor timeout at a higher rate */
> *   self->priv->connection_monitor_id = g_timeout_add_seconds (BEARER_CONNECTION_MONITOR_TIMEOUT,
> *   (GSourceFunc) connection_monitor_cb,
> *   self);
> +
> *   /* Remove the initial connection monitor timeout as we added a new one */
> *   return G_SOURCE_REMOVE;
> +}
> +
> static void
> connection_monitor_start (MMBaseBearer *self)
> {
> @@ -208,10 +227,10 @@ connection_monitor_start (MMBaseBearer *self)
> if (self->priv->load_connection_status_unsupported)
>  return;
> 
> *   /* Schedule */
> 
> *   /* Schedule initial check */
> g_assert (!self->priv->connection_monitor_id);
> 
> *   self->priv->connection_monitor_id = g_timeout_add_seconds (BEARER_CONNECTION_MONITOR_TIMEOUT,
> *   (GSourceFunc) connection_monitor_cb,
> 
> *   self->priv->connection_monitor_id = g_timeout_add_seconds (BEARER_CONNECTION_MONITOR_INITIAL_TIMEOUT,
> *   (GSourceFunc) initial_connection_monitor_cb,
> self);
> }
> 
> --
> 2.13.0
> 
> _______________________________________________
> ModemManager-devel mailing list
> ModemManager-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel


More information about the ModemManager-devel mailing list