summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/gvfsdnssdresolver.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/common/gvfsdnssdresolver.c b/common/gvfsdnssdresolver.c
index 7aa2cfcb..b7f0cd3f 100644
--- a/common/gvfsdnssdresolver.c
+++ b/common/gvfsdnssdresolver.c
@@ -85,6 +85,7 @@ struct _GVfsDnsSdResolver
char **txt_records;
AvahiServiceResolver *avahi_resolver;
+ guint start_avahi_resolver_id;
};
@@ -245,6 +246,7 @@ start_avahi_resolver (gpointer user_data)
resolver);
out:
+ resolver->start_avahi_resolver_id = 0;
g_object_unref (resolver);
return FALSE;
}
@@ -252,10 +254,10 @@ out:
static void
ensure_avahi_resolver (GVfsDnsSdResolver *resolver)
{
- if (resolver->avahi_resolver != NULL)
+ if (resolver->avahi_resolver != NULL || resolver->start_avahi_resolver_id != 0)
return;
- g_idle_add (start_avahi_resolver, g_object_ref (resolver));
+ resolver->start_avahi_resolver_id = g_idle_add (start_avahi_resolver, g_object_ref (resolver));
}
static void
@@ -382,6 +384,8 @@ g_vfs_dns_sd_resolver_finalize (GObject *object)
if (resolver->avahi_resolver != NULL)
avahi_service_resolver_free (resolver->avahi_resolver);
+ if (resolver->start_avahi_resolver_id != 0)
+ g_source_remove (resolver->start_avahi_resolver_id);
resolvers = g_list_remove (resolvers, resolver);