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

Commit 2b4d25be authored by chaviw's avatar chaviw
Browse files

Add ScopedLocalRef for javaObjectForIBinder

javaObjectForIBinder creates a Java object that is not getting freed.
Wrap all javaObjectForIBinder calls with ScopedLocalRef so they're
automatically cleaned up

Test: Builds
Bug: 225287201
Change-Id: Id5970ef8b1ff256ebc404d4242819728f120050d
parent 45081ab6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -105,10 +105,11 @@ std::shared_ptr<InputApplicationHandle> android_view_InputApplicationHandle_getH

jobject android_view_InputApplicationHandle_fromInputApplicationInfo(
        JNIEnv* env, gui::InputApplicationInfo inputApplicationInfo) {
    jobject binderObject = javaObjectForIBinder(env, inputApplicationInfo.token);
    ScopedLocalRef<jobject> binderObject(env,
                                         javaObjectForIBinder(env, inputApplicationInfo.token));
    ScopedLocalRef<jstring> name(env, env->NewStringUTF(inputApplicationInfo.name.data()));
    return env->NewObject(gInputApplicationHandleClassInfo.clazz,
                          gInputApplicationHandleClassInfo.ctor, binderObject, name.get(),
                          gInputApplicationHandleClassInfo.ctor, binderObject.get(), name.get(),
                          inputApplicationInfo.dispatchingTimeoutMillis);
}

+4 −3
Original line number Diff line number Diff line
@@ -261,8 +261,8 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn
    }
    LOG_ALWAYS_FATAL_IF(inputWindowHandle == nullptr,
                        "Failed to create new InputWindowHandle object.");
    env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.token,
                        javaObjectForIBinder(env, windowInfo.token));
    ScopedLocalRef<jobject> token(env, javaObjectForIBinder(env, windowInfo.token));
    env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.token, token.get());
    ScopedLocalRef<jstring> name(env, env->NewStringUTF(windowInfo.name.data()));
    env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.name, name.get());
    env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.layoutParamsFlags,
@@ -317,8 +317,9 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn
    ScopedLocalRef<jobject> matrixObj(env, AMatrix_newInstance(env, transformVals));
    env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.transform, matrixObj.get());

    ScopedLocalRef<jobject> windowToken(env, javaObjectForIBinder(env, windowInfo.windowToken));
    env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.windowToken,
                        javaObjectForIBinder(env, windowInfo.windowToken));
                        windowToken.get());

    return inputWindowHandle;
}