service: Sort service sequence after checking provisioned services
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Tue, 5 Jun 2012 08:24:12 +0000 (11:24 +0300)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 11 Jun 2012 10:03:28 +0000 (13:03 +0300)
src/config.c
src/service.c

index aba06c4..e04a88f 100644 (file)
@@ -828,6 +828,8 @@ static void provision_service(gpointer key, gpointer value, gpointer user_data)
 
        if (config->passphrase != NULL)
                __connman_service_set_string(service, "Passphrase", config->passphrase);
+
+       __connman_service_mark_dirty();
 }
 
 int __connman_config_provision_service(struct connman_service *service)
index 5e1b51a..c118278 100644 (file)
@@ -5506,6 +5506,21 @@ static void provision_changed(gpointer value, gpointer user_data)
 void __connman_service_provision_changed(const char *ident)
 {
        g_sequence_foreach(service_list, provision_changed, (void *)ident);
+
+       /*
+        * Because the provision_changed() might have set some services
+        * as favorite, we must sort the sequence now.
+        */
+       if (services_dirty == TRUE) {
+               services_dirty = FALSE;
+
+               if (g_sequence_get_length(service_list) > 1) {
+                       g_sequence_sort(service_list, service_compare, NULL);
+                       service_schedule_changed();
+               }
+
+               __connman_connection_update_gateway();
+       }
 }
 
 void __connman_service_set_config(struct connman_service *service,