diff options
author | Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com> | 2011-12-01 12:43:05 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2011-12-01 12:14:08 +0100 |
commit | 9e3ebe7161dc9ba5b417a17311f98bc57bfb251a (patch) | |
tree | 96ffd7435434abefc92231f117d80b023869dc99 | |
parent | ec4029b54511a11900807b97f243dcb5c72685ec (diff) | |
download | connman-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.c | 14 |
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) |