summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej S. Szmigiero <maciej.szmigiero@oracle.com>2023-01-06 00:12:12 +0100
committerMaciej S. Szmigiero <maciej.szmigiero@oracle.com>2023-01-07 22:00:20 +0100
commitb281954817b0dbf7084221925422c2e9a8f162c6 (patch)
tree71249709e5d3f17e589620765e56d8271cb03190
parentfb4ce2462bd7e7a5c8fb959903bb98567ec177fa (diff)
downloadgeoclue-b281954817b0dbf7084221925422c2e9a8f162c6.tar.gz
web-source: Cancel old g_network_monitor calls before starting new ones
This way there won't be multiple outstanding reachability checks if network configuration changes quickly multiple times.
-rw-r--r--src/gclue-web-source.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gclue-web-source.c b/src/gclue-web-source.c
index 881aa18..e3e9a37 100644
--- a/src/gclue-web-source.c
+++ b/src/gclue-web-source.c
@@ -286,6 +286,17 @@ submit_url_checked_cb (GObject *source_object,
}
static void
+cancellable_cancel_recreate (GClueWebSource *source)
+{
+ GClueWebSourcePrivate *priv = source->priv;
+
+ g_cancellable_cancel (priv->cancellable);
+
+ g_clear_object (&priv->cancellable);
+ priv->cancellable = g_cancellable_new ();
+}
+
+static void
on_network_changed (GNetworkMonitor *unused_monitor G_GNUC_UNUSED,
gboolean available G_GNUC_UNUSED,
gpointer user_data)
@@ -295,6 +306,8 @@ on_network_changed (GNetworkMonitor *unused_monitor G_GNUC_UNUSED,
g_autoptr(GSocketConnectable) submit_addr = NULL;
g_autoptr(GSocketConnectable) locate_addr = NULL;
+ cancellable_cancel_recreate (web);
+
if (web->priv->submit_url) {
submit_addr = g_network_address_parse_uri (web->priv->submit_url,
80, NULL);