summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Josep del Río <joseprio@google.com> 2023-07-10 10:26:54 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-07-10 10:26:54 +0000
commitd25574f3df6577b40e41fee9cc54d2ca4c7c71fb (patch)
tree0f494ffb63b3da3a0440e3315de5386967171a1e
parent93b27254d8c01c2b1aebe55f9da8f34618537ff8 (diff)
parentb3bb4cfe8a7aeac0bc5490f689fbd18d0546602a (diff)
Merge "Do not share key mappings with JNI object" into sc-dev am: 4a45e9c435 am: 77cbfcd9a8 am: c6952e05d1 am: b3bb4cfe8a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23785419 Change-Id: I6eac151f9bb2db94adb1620a5e8cd4b577f54d4c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--core/jni/android_view_InputDevice.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/core/jni/android_view_InputDevice.cpp b/core/jni/android_view_InputDevice.cpp
index 9cc72437a023..f7c770e0bffb 100644
--- a/core/jni/android_view_InputDevice.cpp
+++ b/core/jni/android_view_InputDevice.cpp
@@ -42,6 +42,13 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
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,
env->NewStringUTF(deviceInfo.getIdentifier().descriptor.c_str()));
if (!descriptorObj.get()) {
@@ -49,8 +56,8 @@ jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& devi
}
ScopedLocalRef<jobject> kcmObj(env,
- android_view_KeyCharacterMap_create(env, deviceInfo.getId(),
- deviceInfo.getKeyCharacterMap()));
+ android_view_KeyCharacterMap_create(env, deviceInfo.getId(),
+ map));
if (!kcmObj.get()) {
return NULL;
}