diff options
author | Bastien Nocera <hadess@hadess.net> | 2018-10-29 11:06:05 +0000 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2018-10-29 11:06:05 +0000 |
commit | 04e69a81fa34b62c9415f4e6b8df30cfee5a0ad5 (patch) | |
tree | b702cd2d5cf77e2dd4648b5b191ade9931ae17ac /src | |
parent | a0dba7a1fd18646b7dc6174e2c04a52cb5669811 (diff) | |
download | geoclue-04e69a81fa34b62c9415f4e6b8df30cfee5a0ad5.tar.gz |
web-source: Minimise get_internet_available() calls
Rather than calling get_internet_available() too often, use the cached
->internet_available variable and call get_internet_available() when
network status has actually changed.
Diffstat (limited to 'src')
-rw-r--r-- | src/gclue-web-source.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/gclue-web-source.c b/src/gclue-web-source.c index 4f7ad30..f361e29 100644 --- a/src/gclue-web-source.c +++ b/src/gclue-web-source.c @@ -127,13 +127,11 @@ static void refresh_accuracy_level (GClueWebSource *web) { GClueAccuracyLevel new, existing; - gboolean available; - available = get_internet_available (); existing = gclue_location_source_get_available_accuracy_level (GCLUE_LOCATION_SOURCE (web)); new = GCLUE_WEB_SOURCE_GET_CLASS (web)->get_available_accuracy_level - (web, available); + (web, web->priv->internet_available); if (new != existing) { g_debug ("Available accuracy level from %s: %u", G_OBJECT_TYPE_NAME (web), new); @@ -152,14 +150,15 @@ on_network_changed (GNetworkMonitor *monitor G_GNUC_UNUSED, GError *error = NULL; gboolean last_available = web->priv->internet_available; + web->priv->internet_available = get_internet_available (); + if (last_available == web->priv->internet_available) + return; /* We already reacted to network change */ + refresh_accuracy_level (web); if (!gclue_location_source_get_active (GCLUE_LOCATION_SOURCE (user_data))) return; - web->priv->internet_available = get_internet_available (); - if (last_available == web->priv->internet_available) - return; /* We already reacted to network change */ if (!web->priv->internet_available) { g_debug ("Network unavailable"); return; @@ -266,10 +265,10 @@ gclue_web_source_refresh (GClueWebSource *source) { g_return_if_fail (GCLUE_IS_WEB_SOURCE (source)); - if (get_internet_available ()) { - source->priv->internet_available = FALSE; - on_network_changed (NULL, TRUE, source); - } + /* Make sure ->internet_available is different from + * the real availability of internet access */ + source->priv->internet_available = FALSE; + on_network_changed (NULL, TRUE, source); } static gboolean |