summaryrefslogtreecommitdiffstats
path: root/core/jni/android_server_BluetoothService.cpp
diff options
context:
space:
mode:
authorJaikumar Ganesh <jaikumar@google.com>2009-09-20 11:25:09 -0700
committerJaikumar Ganesh <jaikumar@google.com>2009-09-20 11:28:34 -0700
commit995ae82f38d93050a5f1b80433e8ae844a05953d (patch)
treec16676f973243d284dba379152c060d766373215 /core/jni/android_server_BluetoothService.cpp
parentd163f4babe101b89aaf322c34d3bafeae237f7da (diff)
downloadframeworks_base-995ae82f38d93050a5f1b80433e8ae844a05953d.zip
frameworks_base-995ae82f38d93050a5f1b80433e8ae844a05953d.tar.gz
frameworks_base-995ae82f38d93050a5f1b80433e8ae844a05953d.tar.bz2
Make removeBond() call async.
This call has been synchronus since Bluez3.36. However, since the semantics for all Bluetooth API calls are asynchronous make this so too. It does fix an occasional ANR seen while unpairing. Change-Id: If81f8ec262ea1f6f62775282ab33855a8669c41a
Diffstat (limited to 'core/jni/android_server_BluetoothService.cpp')
-rw-r--r--core/jni/android_server_BluetoothService.cpp31
1 files changed, 11 insertions, 20 deletions
diff --git a/core/jni/android_server_BluetoothService.cpp b/core/jni/android_server_BluetoothService.cpp
index c432ed9..c2f93eea 100644
--- a/core/jni/android_server_BluetoothService.cpp
+++ b/core/jni/android_server_BluetoothService.cpp
@@ -387,33 +387,24 @@ static jboolean cancelDeviceCreationNative(JNIEnv *env, jobject object,
static jboolean removeDeviceNative(JNIEnv *env, jobject object, jstring object_path) {
LOGV(__FUNCTION__);
- jboolean result = JNI_FALSE;
#ifdef HAVE_BLUETOOTH
native_data_t *nat = get_native_data(env, object);
if (nat) {
const char *c_object_path = env->GetStringUTFChars(object_path, NULL);
- DBusError err;
- dbus_error_init(&err);
- DBusMessage *reply =
- dbus_func_args_error(env, nat->conn, &err,
- get_adapter_path(env, object),
- DBUS_ADAPTER_IFACE, "RemoveDevice",
- DBUS_TYPE_OBJECT_PATH, &c_object_path,
- DBUS_TYPE_INVALID);
- if (!reply) {
- if (dbus_error_is_set(&err)) {
- LOG_AND_FREE_DBUS_ERROR(&err);
- } else
- LOGE("DBus reply is NULL in function %s", __FUNCTION__);
- result = JNI_FALSE;
- } else {
- result = JNI_TRUE;
- }
+ bool ret = dbus_func_args_async(env, nat->conn, -1,
+ NULL,
+ NULL,
+ NULL,
+ get_adapter_path(env, object),
+ DBUS_ADAPTER_IFACE,
+ "RemoveDevice",
+ DBUS_TYPE_OBJECT_PATH, &c_object_path,
+ DBUS_TYPE_INVALID);
env->ReleaseStringUTFChars(object_path, c_object_path);
- if (reply) dbus_message_unref(reply);
+ return ret ? JNI_TRUE : JNI_FALSE;
}
#endif
- return result;
+ return JNI_FALSE;
}
static jint enableNative(JNIEnv *env, jobject object) {