If a new configuration file is created or single one is modified all
services in configuration files were provisioned, causing disconnection
from currently connected services.
Only service configurations located in just created/modified
configuration files need to be reprovisioned.
---
 src/config.c | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/src/config.c b/src/config.c
index d993fd3..450af84 100644
--- a/src/config.c
+++ b/src/config.c
@@ -1335,22 +1335,35 @@ static int try_provision_service(struct 
connman_config_service *config,
        return 0;
 }
 
+static int
+find_and_provision_service_from_config(struct connman_service *service,
+                                       struct connman_config *config)
+{
+       GHashTableIter iter;
+       gpointer value, key;
+
+       g_hash_table_iter_init(&iter, config->service_table);
+       while (g_hash_table_iter_next(&iter, &key,
+                                       &value)) {
+               if (!try_provision_service(value, service))
+                       return 0;
+       }
+
+       return -ENOENT;
+}
+
 static int find_and_provision_service(struct connman_service *service)
 {
-       GHashTableIter iter, iter_service;
-       gpointer value, key, value_service, key_service;
+       GHashTableIter iter;
+       gpointer value, key;
 
        g_hash_table_iter_init(&iter, config_table);
 
        while (g_hash_table_iter_next(&iter, &key, &value)) {
                struct connman_config *config = value;
 
-               g_hash_table_iter_init(&iter_service, config->service_table);
-               while (g_hash_table_iter_next(&iter_service, &key_service,
-                                               &value_service)) {
-                       if (!try_provision_service(value_service, service))
-                               return 0;
-               }
+               if (!find_and_provision_service_from_config(service, config))
+                       return 0;
        }
 
        return -ENOENT;
@@ -1434,7 +1447,7 @@ int __connman_config_provision_service_ident(struct 
connman_service *service,
                        }
                }
 
-               find_and_provision_service(service);
+               find_and_provision_service_from_config(service, config);
        }
 
        return ret;
-- 
2.5.0

_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman

Reply via email to