diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2016-08-15 13:24:45 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2016-10-12 13:24:09 +0200 |
commit | 1775544dbc737c40aae31516f8ecc4d1822aac22 (patch) | |
tree | 894a949d27159b4dbc7af295bc206ae1671cbf08 /src/mm-base-bearer.c | |
parent | 79aebb9ba4e074f2378d0580d2bd00269b4b026c (diff) |
base-bearer: allow deactivating stats loading if device says unsupported
Diffstat (limited to 'src/mm-base-bearer.c')
-rw-r--r-- | src/mm-base-bearer.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index 14194b9d..0cca8534 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -114,6 +114,8 @@ struct _MMBaseBearerPrivate { guint stats_update_id; /* Timer to measure the duration of the connection */ GTimer *duration_timer; + /* Flag to specify whether reloading stats is supported or not */ + gboolean reload_stats_unsupported; }; /*****************************************************************************/ @@ -234,14 +236,25 @@ static void reload_stats_ready (MMBaseBearer *self, GAsyncResult *res) { - GError *error = NULL; - guint64 rx_bytes = 0; - guint64 tx_bytes = 0; + GError *error = NULL; + guint64 rx_bytes = 0; + guint64 tx_bytes = 0; if (!MM_BASE_BEARER_GET_CLASS (self)->reload_stats_finish (self, &rx_bytes, &tx_bytes, res, &error)) { - mm_warn ("Reloading stats failed: %s", error->message); + /* If reloading stats fails, warn about it and don't update anything */ + if (!g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_UNSUPPORTED)) { + mm_warn ("Reloading stats failed: %s", error->message); + g_error_free (error); + return; + } + + /* If we're being told that reloading stats is unsupported, just ignore + * the error and update oly the duration timer. */ + mm_dbg ("Reloading stats is unsupported by the device"); + self->priv->reload_stats_unsupported = TRUE; + rx_bytes = 0; + tx_bytes = 0; g_error_free (error); - return; } /* We only update stats if they were retrieved properly */ @@ -255,7 +268,8 @@ static gboolean stats_update_cb (MMBaseBearer *self) { /* If the implementation knows how to update stat values, run it */ - if (MM_BASE_BEARER_GET_CLASS (self)->reload_stats && + if (!self->priv->reload_stats_unsupported && + MM_BASE_BEARER_GET_CLASS (self)->reload_stats && MM_BASE_BEARER_GET_CLASS (self)->reload_stats_finish) { MM_BASE_BEARER_GET_CLASS (self)->reload_stats ( self, |