diff options
| -rw-r--r-- | services/core/jni/com_android_server_location_GnssLocationProvider.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index da175792268f..74b7a38e37b8 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -294,7 +294,11 @@ JavaObject::JavaObject(JNIEnv* env, jclass clazz, jmethodID defaultCtor) : env_( JavaObject::JavaObject(JNIEnv* env, jclass clazz, jmethodID stringCtor, const char * sz_arg_1) : env_(env), clazz_(clazz) { - object_ = env_->NewObject(clazz_, stringCtor, env->NewStringUTF(sz_arg_1)); + jstring szArg = env->NewStringUTF(sz_arg_1); + object_ = env_->NewObject(clazz_, stringCtor, szArg); + if (szArg) { + env_->DeleteLocalRef(szArg); + } } @@ -627,6 +631,9 @@ Return<void> GnssCallback::gnssNameCb(const android::hardware::hidl_string& name JNIEnv* env = getJniEnv(); jstring jstringName = env->NewStringUTF(name.c_str()); env->CallVoidMethod(mCallbacksObj, method_setGnssHardwareModelName, jstringName); + if (jstringName) { + env->DeleteLocalRef(jstringName); + } checkAndClearExceptionFromCallback(env, __FUNCTION__); return Void(); @@ -719,6 +726,12 @@ Return<void> GnssCallback::gnssSvStatusCbImpl(const T& svStatus) { static_cast<jint>(listSize), svidWithFlagArray, cn0Array, elevArray, azimArray, carrierFreqArray); + env->DeleteLocalRef(svidWithFlagArray); + env->DeleteLocalRef(cn0Array); + env->DeleteLocalRef(elevArray); + env->DeleteLocalRef(azimArray); + env->DeleteLocalRef(carrierFreqArray); + checkAndClearExceptionFromCallback(env, __FUNCTION__); return Void(); } @@ -1107,13 +1120,18 @@ void GnssMeasurementCallback::translateSingleGnssMeasurement JNIEnv* env = getJniEnv(); translateSingleGnssMeasurement(&(measurement_V2_0->v1_1), object); - SET(CodeType, env->NewStringUTF(measurement_V2_0->codeType.c_str())); + jstring codeType = env->NewStringUTF(measurement_V2_0->codeType.c_str()); + SET(CodeType, codeType); // Overwrite with v2_0.state since v2_0->v1_1->v1_0.state is deprecated. SET(State, static_cast<int32_t>(measurement_V2_0->state)); // Overwrite with v2_0.constellation since v2_0->v1_1->v1_0.constellation is deprecated. SET(ConstellationType, static_cast<int32_t>(measurement_V2_0->constellation)); + + if (codeType) { + env->DeleteLocalRef(codeType); + } } template<class T> @@ -1187,7 +1205,9 @@ jobjectArray GnssMeasurementCallback::translateAllGnssMeasurements(JNIEnv* env, for (uint16_t i = 0; i < count; ++i) { JavaObject object(env, class_gnssMeasurement, method_gnssMeasurementCtor); translateSingleGnssMeasurement(&(measurements[i]), object); - env->SetObjectArrayElement(gnssMeasurementArray, i, object.get()); + jobject gnssMeasurement = object.get(); + env->SetObjectArrayElement(gnssMeasurementArray, i, gnssMeasurement); + env->DeleteLocalRef(gnssMeasurement); } return gnssMeasurementArray; |