summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2018-10-29 11:06:05 +0000
committerBastien Nocera <hadess@hadess.net>2018-10-29 11:06:05 +0000
commit04e69a81fa34b62c9415f4e6b8df30cfee5a0ad5 (patch)
treeb702cd2d5cf77e2dd4648b5b191ade9931ae17ac /src
parenta0dba7a1fd18646b7dc6174e2c04a52cb5669811 (diff)
downloadgeoclue-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.c19
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