Merge "Do not share key mappings with JNI object" into sc-dev am: 4a45e9c435

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23785419

Change-Id: Iea8d6a7ae04318e48fe0bf41ba9013e7e47e3f41
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Josep del Río
2023-07-08 08:06:52 +00:00
committed by Automerger Merge Worker

View File

@@ -42,6 +42,13 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
return NULL; return NULL;
} }
// b/274058082: Pass a copy of the key character map to avoid concurrent
// access
std::shared_ptr<KeyCharacterMap> map = deviceInfo.getKeyCharacterMap();
if (map != nullptr) {
map = std::make_shared<KeyCharacterMap>(*map);
}
ScopedLocalRef<jstring> descriptorObj(env, ScopedLocalRef<jstring> descriptorObj(env,
env->NewStringUTF(deviceInfo.getIdentifier().descriptor.c_str())); env->NewStringUTF(deviceInfo.getIdentifier().descriptor.c_str()));
if (!descriptorObj.get()) { if (!descriptorObj.get()) {
@@ -49,8 +56,8 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
} }
ScopedLocalRef<jobject> kcmObj(env, ScopedLocalRef<jobject> kcmObj(env,
android_view_KeyCharacterMap_create(env, deviceInfo.getId(), android_view_KeyCharacterMap_create(env, deviceInfo.getId(),
deviceInfo.getKeyCharacterMap())); map));
if (!kcmObj.get()) { if (!kcmObj.get()) {
return NULL; return NULL;
} }