Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28a4caf9 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by Andre Eisenbach
Browse files

GATT JNI - get_gatt_db_cb leaking local refs

Bug: 27835277
Change-Id: I4bd0beb763507ea8a4a43a0f707408757f6ce8e0
parent 57a0f6de
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -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.
    // class loader to load it.
    jobject objectForClass = sCallbackEnv->CallObjectMethod(mCallbacksObj, method_getSampleGattDbElement);
    jobject objectForClass = sCallbackEnv->CallObjectMethod(mCallbacksObj, method_getSampleGattDbElement);
    jclass gattDbElementClazz = sCallbackEnv->GetObjectClass(objectForClass);
    jclass gattDbElementClazz = sCallbackEnv->GetObjectClass(objectForClass);
    sCallbackEnv->DeleteLocalRef(objectForClass);


    jmethodID gattDbElementConstructor = sCallbackEnv->GetMethodID(gattDbElementClazz, "<init>", "()V");
    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);
        jobject element = sCallbackEnv->NewObject(gattDbElementClazz, gattDbElementConstructor);


        jfieldID fid;
        jfieldID fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "id", "I");

        fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "id", "I");
        sCallbackEnv->SetIntField(element, fid, curr.id);
        sCallbackEnv->SetIntField(element, fid, curr.id);


        jobject uuid = sCallbackEnv->NewObject(uuidClazz, uuidConstructor, uuid_msb(&curr.uuid), uuid_lsb(&curr.uuid));
        jobject uuid = sCallbackEnv->NewObject(uuidClazz, uuidConstructor, uuid_msb(&curr.uuid), uuid_lsb(&curr.uuid));
        fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "uuid", "java/util/UUID");
        fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "uuid", "java/util/UUID");
        sCallbackEnv->SetObjectField(element, fid, uuid);
        sCallbackEnv->SetObjectField(element, fid, uuid);
        sCallbackEnv->DeleteLocalRef(uuid);


        fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "type", "I");
        fid = sCallbackEnv->GetFieldID(gattDbElementClazz, "type", "I");
        sCallbackEnv->SetIntField(element, fid, curr.type);
        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->SetIntField(element, fid, curr.properties);


        sCallbackEnv->CallBooleanMethod(array, arrayAdd, element);
        sCallbackEnv->CallBooleanMethod(array, arrayAdd, element);

        sCallbackEnv->DeleteLocalRef(element);
        sCallbackEnv->DeleteLocalRef(element);
    }
    }


    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetGattDb, conn_id, array);
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetGattDb, conn_id, array);
    sCallbackEnv->DeleteLocalRef(array);

    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}