--- 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