diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-05-14 20:49:20 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-05-14 20:49:20 -0700 |
commit | 3dd391655187e588a4371f329b228df7e9745ba9 (patch) | |
tree | b6fcbf30c099aaba84c91e851d2967009ea256dd /src | |
parent | 19d241d45b6ebfd7e1cc7d5e289ceba9316db6f2 (diff) | |
download | connman-3dd391655187e588a4371f329b228df7e9745ba9.tar.gz connman-3dd391655187e588a4371f329b228df7e9745ba9.tar.bz2 connman-3dd391655187e588a4371f329b228df7e9745ba9.zip |
Make sure to sort connected services first always first
Diffstat (limited to 'src')
-rw-r--r-- | src/service.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c index c194c557..951c9d6c 100644 --- a/src/service.c +++ b/src/service.c @@ -592,6 +592,13 @@ static gint service_compare(gconstpointer a, gconstpointer b, struct connman_service *service_a = (void *) a; struct connman_service *service_b = (void *) b; + if (service_a->state != service_b->state) { + if (service_a->state == CONNMAN_SERVICE_STATE_READY) + return -1; + if (service_b->state == CONNMAN_SERVICE_STATE_READY) + return 1; + } + if (service_a->order > service_b->order) return -1; @@ -669,6 +676,8 @@ int __connman_service_set_carrier(struct connman_service *service, int __connman_service_indicate_state(struct connman_service *service, enum connman_service_state state) { + GSequenceIter *iter; + DBG("service %p state %d", service, state); if (service == NULL) @@ -728,6 +737,12 @@ int __connman_service_indicate_state(struct connman_service *service, state_changed(service); } + iter = g_hash_table_lookup(service_hash, service->identifier); + if (iter != NULL) + g_sequence_sort_changed(iter, service_compare, NULL); + + __connman_profile_changed(); + return 0; } |