Imported Upstream version 1.35
[platform/upstream/connman.git] / plugins / bluetooth.c
index 45cc319..f759a90 100644 (file)
@@ -206,7 +206,7 @@ static void pan_connect_cb(DBusMessage *message, void *user_data)
        DBusMessageIter iter;
 
        pan = g_hash_table_lookup(networks, path);
-       if (!pan) {
+       if (!pan || !pan->network) {
                DBG("network already removed");
                return;
        }
@@ -218,6 +218,7 @@ static void pan_connect_cb(DBusMessage *message, void *user_data)
 
                if (strcmp(dbus_error,
                                "org.bluez.Error.AlreadyConnected") != 0) {
+                       connman_network_set_associating(pan->network, false);
                        connman_network_set_error(pan->network,
                                CONNMAN_NETWORK_ERROR_ASSOCIATE_FAIL);
                        return;
@@ -272,7 +273,7 @@ static void pan_disconnect_cb(DBusMessage *message, void *user_data)
        struct bluetooth_pan *pan;
 
        pan = g_hash_table_lookup(networks, path);
-       if (!pan) {
+       if (!pan || !pan->network) {
                DBG("network already removed");
                return;
        }
@@ -337,6 +338,7 @@ static void pan_create_nap(struct bluetooth_pan *pan)
 {
        struct connman_device *device;
        const char* role;
+       const char *adapter;
 
        role = proxy_get_role(pan->btdevice_proxy);
        if (!role) {
@@ -344,8 +346,12 @@ static void pan_create_nap(struct bluetooth_pan *pan)
                return;
        }
 
-       device = g_hash_table_lookup(devices,
-                       proxy_get_string(pan->btdevice_proxy, "Adapter"));
+       adapter = proxy_get_string(pan->btdevice_proxy, "Adapter");
+
+       if (!adapter)
+               return;
+
+       device = g_hash_table_lookup(devices, adapter);
 
        if (!device || !connman_device_get_powered(device))
                return;
@@ -713,12 +719,16 @@ static bool tethering_create(const char *path,
 
        DBG("path %s bridge %s", path, bridge);
 
-       if (!bridge)
-               return -EINVAL;
+       if (!bridge) {
+               g_free(tethering);
+               return false;
+       }
 
        proxy = g_dbus_proxy_new(client, path, "org.bluez.NetworkServer1");
-       if (!proxy)
+       if (!proxy) {
+               g_free(tethering);
                return false;
+       }
 
        tethering->technology = technology;
        tethering->bridge = g_strdup(bridge);