---
 src/service.c |   46 ++++++++++++++++++++++++++--------------------
 1 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/src/service.c b/src/service.c
index 14de1d0..994eaa6 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2039,6 +2039,7 @@ static DBusMessage *set_property(DBusConnection *conn,
                        g_str_equal(name, "IPv6.Configuration")) {
 
                enum connman_ipconfig_type type = CONNMAN_IPCONFIG_TYPE_UNKNOWN;
+               struct connman_ipconfig *ipv4 = NULL, *ipv6 = NULL;
                int err = 0;
 
                DBG("%s", name);
@@ -2047,31 +2048,37 @@ static DBusMessage *set_property(DBusConnection *conn,
                                        service->ipconfig_ipv6 == NULL)
                        return __connman_error_invalid_property(msg);
 
-               if (is_connecting(service) ||
-                               is_connected(service)) {
-                       __connman_network_clear_ipconfig(service->network,
-                                                       service->ipconfig_ipv4);
-                       __connman_network_clear_ipconfig(service->network,
-                                                       service->ipconfig_ipv6);
-               }
-
                if (g_str_equal(name, "IPv4.Configuration") == TRUE) {
+
+                       if (is_connecting(service) || is_connected(service))
+                               __connman_network_clear_ipconfig(
+                                               service->network,
+                                               service->ipconfig_ipv4);
+
+                       ipv4 = service->ipconfig_ipv4;
                        type = CONNMAN_IPCONFIG_TYPE_IPV4;
-                       err = __connman_ipconfig_set_config(
-                                       service->ipconfig_ipv4, type, &value);
+                       err = __connman_ipconfig_set_config(ipv4, type,
+                                                               &value);
+
                } else if (g_str_equal(name, "IPv6.Configuration") == TRUE) {
+
+                       if (is_connecting(service) || is_connected(service))
+                               __connman_network_clear_ipconfig(
+                                               service->network,
+                                               service->ipconfig_ipv6);
+
+                       ipv6 = service->ipconfig_ipv6;
                        type = CONNMAN_IPCONFIG_TYPE_IPV6;
-                       err = __connman_ipconfig_set_config(
-                                       service->ipconfig_ipv6, type, &value);
+                       err = __connman_ipconfig_set_config(ipv6, type,
+                                                               &value);
                }
 
                if (err < 0) {
-                       if (is_connected(service) ||
-                                       is_connecting(service))
+                       if (is_connected(service) || is_connecting(service))
                                __connman_network_set_ipconfig(
                                                service->network,
-                                               service->ipconfig_ipv4,
-                                               service->ipconfig_ipv6);
+                                               ipv4,
+                                               ipv6);
                        return __connman_error_failed(msg, -err);
                }
 
@@ -2080,11 +2087,10 @@ static DBusMessage *set_property(DBusConnection *conn,
                else if (type == CONNMAN_IPCONFIG_TYPE_IPV6)
                        ipv6_configuration_changed(service);
 
-               if (is_connecting(service) ||
-                               is_connected(service))
+               if (is_connecting(service) || is_connected(service))
                        __connman_network_set_ipconfig(service->network,
-                                               service->ipconfig_ipv4,
-                                               service->ipconfig_ipv6);
+                                                       ipv4,
+                                                       ipv6);
 
                __connman_storage_save_service(service);
        } else
-- 
1.7.0.4

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to