Fix nap_activate failed in bt_nap_disconnect_all 73/33473/1
authorChanglong Xie <changlongx.xie@intel.com>
Mon, 12 Jan 2015 05:05:28 +0000 (13:05 +0800)
committerChanglong Xie <changlongx.xie@intel.com>
Mon, 12 Jan 2015 05:15:17 +0000 (13:15 +0800)
Make sure nap_deactivate accomplished

Change-Id: Ibcd242d444e94e7755f0c25944a1c44f34a97eac
Signed-off-by: Changlong Xie <changlongx.xie@intel.com>
capi/bluetooth.c

index 2480e0c01a3cd7b8a0a4dc3ecc1939fdf0c8af8c..21f2482f87bac2387420c5632172438f7ca9cbaa 100644 (file)
@@ -6237,6 +6237,54 @@ int bt_panu_unset_connection_state_changed_cb(void)
        return BT_SUCCESS;
 }
 
+static int connman_get_tethering(bool *tethering)
+{
+       GVariant *result;
+       GDBusConnection *connection;
+       GError *error = NULL;
+
+       if (initialized == false)
+               return BT_ERROR_NOT_INITIALIZED;
+
+       if (default_adapter == NULL)
+               return BT_ERROR_ADAPTER_NOT_FOUND;
+
+       connection = get_system_dbus_connect();
+       if (connection == NULL)
+               return BT_ERROR_OPERATION_FAILED;
+
+       result = g_dbus_connection_call_sync(connection, CONNMAN_DBUS_NAME,
+                               CONNMAN_BLUETOOTH_TECHNOLOGY_PATH,
+                               CONNMAN_BLUETOTOH_TECHNOLOGY_INTERFACE,
+                               "GetProperties", NULL, NULL,
+                                       0, -1, NULL, &error);
+
+       if (error) {
+               DBG("error %s", error->message);
+               g_error_free(error);
+               return BT_ERROR_OPERATION_FAILED;
+       }
+
+       if (result != NULL) {
+               GVariantIter *iter;
+               GVariant *item;
+
+               g_variant_get(result, "(a{sv})", &iter);
+               while ((item = g_variant_iter_next_value(iter))) {
+                       gchar *key;
+                       GVariant *value;
+
+                       g_variant_get(item, "{sv}", &key, &value);
+                       if (g_strcmp0("Tethering", key) == 0) {
+                               *tethering = g_variant_get_boolean(value);
+                               return BT_SUCCESS;
+                       }
+               }
+       }
+
+       return BT_ERROR_OPERATION_FAILED;
+}
+
 static int connman_set_tethering(bool tethering)
 {
        GDBusConnection *connection;
@@ -6287,6 +6335,11 @@ int bt_nap_disconnect_all(void)
        DBG("");
 
        if (bt_nap_deactivate() == BT_SUCCESS) {
+               bool tethering = true;
+
+               while (true == tethering) {
+                       connman_get_tethering(&tethering);
+               }
                DBG("nap deactivate done");
                return bt_nap_activate();
        } else