aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-base-bearer.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c
index 222e123d..a6043d1e 100644
--- a/src/mm-base-bearer.c
+++ b/src/mm-base-bearer.c
@@ -195,20 +195,22 @@ static gboolean
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);
+ if (self->priv->status == MM_BEARER_STATUS_CONNECTED)
+ MM_BASE_BEARER_GET_CLASS (self)->load_connection_status (
+ 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);
+ if (self->priv->status == MM_BEARER_STATUS_CONNECTED)
+ 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,
@@ -305,6 +307,10 @@ reload_stats_ready (MMBaseBearer *self,
static gboolean
stats_update_cb (MMBaseBearer *self)
{
+ /* Ignore stats update if we're not connected */
+ if (self->priv->status != MM_BEARER_STATUS_CONNECTED)
+ return G_SOURCE_CONTINUE;
+
/* If the implementation knows how to update stat values, run it */
if (!self->priv->reload_stats_unsupported &&
MM_BASE_BEARER_GET_CLASS (self)->reload_stats &&
@@ -411,15 +417,15 @@ bearer_update_status_connected (MMBaseBearer *self,
self->priv->ignore_disconnection_reports = TRUE;
}
+ /* Update the property value */
+ self->priv->status = MM_BEARER_STATUS_CONNECTED;
+ g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]);
+
/* Start statistics */
bearer_stats_start (self);
/* Start connection monitor, if supported */
connection_monitor_start (self);
-
- /* Update the property value */
- self->priv->status = MM_BEARER_STATUS_CONNECTED;
- g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]);
}
/*****************************************************************************/