summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>2011-12-01 12:43:05 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2011-12-01 12:14:08 +0100
commit9e3ebe7161dc9ba5b417a17311f98bc57bfb251a (patch)
tree96ffd7435434abefc92231f117d80b023869dc99
parentec4029b54511a11900807b97f243dcb5c72685ec (diff)
downloadconnman-9e3ebe7161dc9ba5b417a17311f98bc57bfb251a.tar.gz
connman-9e3ebe7161dc9ba5b417a17311f98bc57bfb251a.tar.bz2
connman-9e3ebe7161dc9ba5b417a17311f98bc57bfb251a.zip
service: Ensure the service list is well sorted after each update
Fixes BMC#23715
-rw-r--r--src/service.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/service.c b/src/service.c
index bb01e6ff..a3bc3bc4 100644
--- a/src/service.c
+++ b/src/service.c
@@ -5564,6 +5564,7 @@ struct connman_service * __connman_service_create_from_network(struct connman_ne
void __connman_service_update_from_network(struct connman_network *network)
{
+ connman_bool_t need_sort = FALSE;
struct connman_service *service;
connman_uint8_t strength;
connman_bool_t roaming;
@@ -5597,28 +5598,33 @@ void __connman_service_update_from_network(struct connman_network *network)
goto roaming;
service->strength = strength;
+ need_sort = TRUE;
strength_changed(service);
roaming:
roaming = connman_network_get_bool(service->network, "Roaming");
if (roaming == service->roaming)
- return;
+ goto sorting;
stats_enable = stats_enabled(service);
if (stats_enable == TRUE)
stats_stop(service);
service->roaming = roaming;
+ need_sort = TRUE;
if (stats_enable == TRUE)
stats_start(service);
roaming_changed(service);
- iter = g_hash_table_lookup(service_hash, service->identifier);
- if (iter != NULL)
- g_sequence_sort_changed(iter, service_compare, NULL);
+sorting:
+ if (need_sort == TRUE) {
+ iter = g_hash_table_lookup(service_hash, service->identifier);
+ if (iter != NULL)
+ g_sequence_sort_changed(iter, service_compare, NULL);
+ }
}
void __connman_service_remove_from_network(struct connman_network *network)