summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gclue-nmea-source.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/src/gclue-nmea-source.c b/src/gclue-nmea-source.c
index d016a1f..10d50cd 100644
--- a/src/gclue-nmea-source.c
+++ b/src/gclue-nmea-source.c
@@ -248,10 +248,28 @@ CREATE_SERVICE:
static void
remove_service (GClueNMEASource *source,
- const char *name)
+ AvahiServiceInfo *service)
{
- AvahiServiceInfo *service;
guint n_services = 0;
+
+ avahi_service_free (service);
+ source->priv->all_services = g_list_remove
+ (source->priv->all_services, service);
+
+ n_services = g_list_length (source->priv->all_services);
+
+ g_debug ("No. of _nmea-0183._tcp services %u",
+ n_services);
+
+ refresh_accuracy_level (source);
+ reconnect_service (source);
+}
+
+static void
+remove_service_by_name (GClueNMEASource *source,
+ const char *name)
+{
+ AvahiServiceInfo *service;
GList *item;
/* only `name` is required here */
@@ -268,17 +286,7 @@ remove_service (GClueNMEASource *source,
if (item == NULL)
return;
- avahi_service_free (item->data);
- source->priv->all_services = g_list_delete_link
- (source->priv->all_services, item);
-
- n_services = g_list_length (source->priv->all_services);
-
- g_debug ("No. of _nmea-0183._tcp services %u",
- n_services);
-
- refresh_accuracy_level (source);
- reconnect_service (source);
+ remove_service (source, item->data);
}
static void
@@ -413,7 +421,7 @@ browse_callback (AvahiServiceBrowser *service_browser,
type,
domain);
- remove_service (GCLUE_NMEA_SOURCE (user_data), name);
+ remove_service_by_name (GCLUE_NMEA_SOURCE (user_data), name);
break;
@@ -456,6 +464,8 @@ on_read_gga_sentence (GObject *object,
}
g_object_unref (data_input_stream);
+ remove_service (source, source->priv->active_service);
+
return;
}
g_debug ("Network source sent: \"%s\"", message);