From: Marcel Holtmann Date: Tue, 12 Jul 2011 09:48:11 +0000 (+0200) Subject: provider: Untangle create and connect code block X-Git-Tag: 0.76~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dc8904eb9962882e14c92c8d865f1f49fbd02d57;p=platform%2Fupstream%2Fconnman.git provider: Untangle create and connect code block --- diff --git a/src/provider.c b/src/provider.c index 68183dc..ca6d2ae 100644 --- a/src/provider.c +++ b/src/provider.c @@ -475,10 +475,9 @@ int __connman_provider_create_and_connect(DBusMessage *msg) { struct connman_provider *provider; DBusMessageIter iter, array; - const char *type = NULL, *name = NULL, *service_path = NULL; + const char *type = NULL, *name = NULL, *service_path; const char *host = NULL, *domain = NULL; char *ident; - gboolean created = FALSE; int err; dbus_message_iter_init(msg, &iter); @@ -524,25 +523,21 @@ int __connman_provider_create_and_connect(DBusMessage *msg) DBG("ident %s", ident); provider = connman_provider_lookup(ident); - if (provider == NULL) { - created = TRUE; provider = connman_provider_get(ident); - if (provider) { - provider->host = g_strdup(host); - provider->domain = g_strdup(domain); - provider->name = g_strdup(name); - provider->type = g_strdup(type); + if (provider == NULL) { + DBG("can not create provider"); + return -EOPNOTSUPP; } + provider->host = g_strdup(host); + provider->domain = g_strdup(domain); + provider->name = g_strdup(name); + provider->type = g_strdup(type); + provider_register(provider); } - if (provider == NULL) { - DBG("can not create provider"); - err = -EOPNOTSUPP; - goto failed; - } dbus_message_iter_init(msg, &iter); dbus_message_iter_recurse(&iter, &array); @@ -568,12 +563,13 @@ int __connman_provider_create_and_connect(DBusMessage *msg) g_free(ident); - if (provider->vpn_service == NULL) + if (provider->vpn_service == NULL) { provider->vpn_service = __connman_service_create_from_provider(provider); - if (provider->vpn_service == NULL) { - err = -EOPNOTSUPP; - goto failed; + if (provider->vpn_service == NULL) { + err = -EOPNOTSUPP; + goto unref; + } } err = __connman_service_connect(provider->vpn_service); @@ -587,15 +583,13 @@ int __connman_provider_create_and_connect(DBusMessage *msg) return 0; failed: - if (provider != NULL && created == TRUE) { - DBG("can not connect delete provider"); - connman_provider_unref(provider); + __connman_service_put(provider->vpn_service); + provider->vpn_service = NULL; - if (provider->vpn_service != NULL) { - __connman_service_put(provider->vpn_service); - provider->vpn_service = NULL; - } - } +unref: + DBG("can not connect, delete provider"); + + connman_provider_unref(provider); return err; }