diff options
author | Jakub Pawlowski <jpawlowski@google.com> | 2016-03-24 16:39:02 -0700 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2016-03-28 04:37:00 +0000 |
commit | 31785275c1e2112a15cc1a966207bae0601ecd8a (patch) | |
tree | 641ca6b3b8f29c3940cd8e3ce7fc5afa507bd8f8 /jni | |
parent | 4afd6b9c12b0cfa753b388b9eaace86692b4fc2f (diff) | |
download | android_packages_apps_Bluetooth-31785275c1e2112a15cc1a966207bae0601ecd8a.tar.gz android_packages_apps_Bluetooth-31785275c1e2112a15cc1a966207bae0601ecd8a.tar.bz2 android_packages_apps_Bluetooth-31785275c1e2112a15cc1a966207bae0601ecd8a.zip |
GATT JNI - get_gatt_db_cb leaking local refs
Bug: 27835277
Change-Id: I4bd0beb763507ea8a4a43a0f707408757f6ce8e0
Diffstat (limited to 'jni')
-rw-r--r-- | jni/com_android_bluetooth_gatt.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/jni/com_android_bluetooth_gatt.cpp b/jni/com_android_bluetooth_gatt.cpp index 2261f6349..582d63cc6 100644 --- a/jni/com_android_bluetooth_gatt.cpp +++ b/jni/com_android_bluetooth_gatt.cpp @@ -559,6 +559,7 @@ void btgattc_get_gatt_db_cb(int conn_id, btgatt_db_element_t *db, int count) // class loader to load it. jobject objectForClass = sCallbackEnv->CallObjectMethod(mCallbacksObj, method_getSampleGattDbElement); jclass gattDbElementClazz = sCallbackEnv->GetObjectClass(objectForClass); + sCallbackEnv->DeleteLocalRef(objectForClass); jmethodID gattDbElementConstructor = sCallbackEnv->GetMethodID(gattDbElementClazz, "<init>", "()V"); @@ -574,14 +575,13 @@ void btgattc_get_gatt_db_cb(int conn_id, btgatt_db_element_t *db, int count) jobject element = sCallbackEnv->NewObject(gattDbElementClazz, gattDbElementConstructor); - jfieldID fid; - - fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "id", "I"); + jfieldID fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "id", "I"); sCallbackEnv->SetIntField(element, fid, curr.id); jobject uuid = sCallbackEnv->NewObject(uuidClazz, uuidConstructor, uuid_msb(&curr.uuid), uuid_lsb(&curr.uuid)); fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "uuid", "java/util/UUID"); sCallbackEnv->SetObjectField(element, fid, uuid); + sCallbackEnv->DeleteLocalRef(uuid); fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "type", "I"); sCallbackEnv->SetIntField(element, fid, curr.type); @@ -599,11 +599,12 @@ void btgattc_get_gatt_db_cb(int conn_id, btgatt_db_element_t *db, int count) sCallbackEnv->SetIntField(element, fid, curr.properties); sCallbackEnv->CallBooleanMethod(array, arrayAdd, element); - sCallbackEnv->DeleteLocalRef(element); } sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetGattDb, conn_id, array); + sCallbackEnv->DeleteLocalRef(array); + checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } |