From 9615b0c6ad92dd5486b4f6dbfcc6290867a48e45 Mon Sep 17 00:00:00 2001 From: chaviw Date: Wed, 2 Mar 2022 17:40:01 -0600 Subject: [PATCH] Add ScopedLocalRef for new Strings in JNI When creating a new String, wrap in ScopedLocalRef to ensure the String is cleaned up. Test: hprof after using the device a lot Fixes: 222170518 Change-Id: Idf0b903381067d55399e6d66b3034efad90ab072 --- core/jni/android_hardware_input_InputWindowHandle.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index 93ce37755f940..f453d1f06e22c 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -325,8 +325,8 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn "Failed to create new InputWindowHandle object."); env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.token, javaObjectForIBinder(env, windowInfo.token)); - env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.name, - env->NewStringUTF(windowInfo.name.data())); + ScopedLocalRef name(env, env->NewStringUTF(windowInfo.name.data())); + env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.name, name.get()); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.layoutParamsFlags, static_cast(windowInfo.layoutParamsFlags.get())); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.layoutParamsType, @@ -374,8 +374,9 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn static_cast(windowInfo.touchOcclusionMode)); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerPid, windowInfo.ownerPid); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerUid, windowInfo.ownerUid); + ScopedLocalRef packageName(env, env->NewStringUTF(windowInfo.packageName.data())); env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.packageName, - env->NewStringUTF(windowInfo.packageName.data())); + packageName.get()); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.inputFeatures, static_cast(windowInfo.inputFeatures.get()));