summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeeshan Ali (Khattak) <zeeshanak@gnome.org>2015-09-16 19:27:27 +0100
committerZeeshan Ali (Khattak) <zeeshanak@gnome.org>2015-09-16 19:29:56 +0100
commitce11e28e7fb6ea89db91c0a41528b69a137d159c (patch)
treef13be7a3d701f0b88f42d3cd750158b7e3f3f140
parent54a4ec7bcbc757fae1f1be91f925ad5797fc3bdb (diff)
nmea-source: Drop service on failure to read from itwip/drop-service
Since we longer read NMEA data from service if we fail to read from it and it's most likely indication that service has closed the socket without (first) advertising it going down, let's just drop the service from the list and refresh available accuracy level.
-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);