diff options
author | Zeeshan Ali (Khattak) <zeeshanak@gnome.org> | 2015-09-16 19:27:27 +0100 |
---|---|---|
committer | Zeeshan Ali (Khattak) <zeeshanak@gnome.org> | 2015-09-16 19:29:56 +0100 |
commit | ce11e28e7fb6ea89db91c0a41528b69a137d159c (patch) | |
tree | f13be7a3d701f0b88f42d3cd750158b7e3f3f140 | |
parent | 54a4ec7bcbc757fae1f1be91f925ad5797fc3bdb (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.c | 38 |
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); |