diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index 204a1ea977e78..fb3076ba9ddd6 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -59,6 +59,7 @@ #include #include +#include #include #include #include @@ -723,6 +724,7 @@ nsecs_t NativeInputManager::notifyANR(const sp& inputApp ATRACE_CALL(); JNIEnv* env = jniEnv(); + ScopedLocalFrame localFrame(env); jobject tokenObj = javaObjectForIBinder(env, token); jstring reasonObj = env->NewStringUTF(reason.c_str()); @@ -735,8 +737,6 @@ nsecs_t NativeInputManager::notifyANR(const sp& inputApp } else { assert(newTimeout >= 0); } - - env->DeleteLocalRef(reasonObj); return newTimeout; } @@ -747,6 +747,7 @@ void NativeInputManager::notifyInputChannelBroken(const sp& token) { ATRACE_CALL(); JNIEnv* env = jniEnv(); + ScopedLocalFrame localFrame(env); jobject tokenObj = javaObjectForIBinder(env, token); if (tokenObj) { @@ -764,6 +765,7 @@ void NativeInputManager::notifyFocusChanged(const sp& oldToken, ATRACE_CALL(); JNIEnv* env = jniEnv(); + ScopedLocalFrame localFrame(env); jobject oldTokenObj = javaObjectForIBinder(env, oldToken); jobject newTokenObj = javaObjectForIBinder(env, newToken); @@ -1139,6 +1141,7 @@ nsecs_t NativeInputManager::interceptKeyBeforeDispatching( nsecs_t result = 0; if (policyFlags & POLICY_FLAG_TRUSTED) { JNIEnv* env = jniEnv(); + ScopedLocalFrame localFrame(env); // Token may be null jobject tokenObj = javaObjectForIBinder(env, token); @@ -1173,6 +1176,7 @@ bool NativeInputManager::dispatchUnhandledKey(const sp& token, bool result = false; if (policyFlags & POLICY_FLAG_TRUSTED) { JNIEnv* env = jniEnv(); + ScopedLocalFrame localFrame(env); // Note: tokenObj may be null. jobject tokenObj = javaObjectForIBinder(env, token); @@ -1224,6 +1228,7 @@ bool NativeInputManager::checkInjectEventsPermissionNonReentrant( void NativeInputManager::onPointerDownOutsideFocus(const sp& touchedToken) { ATRACE_CALL(); JNIEnv* env = jniEnv(); + ScopedLocalFrame localFrame(env); jobject touchedTokenObj = javaObjectForIBinder(env, touchedToken); env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus, touchedTokenObj);