From 8f6c603b3bc9b1f81a0ab2299429d725b463b92f Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 5 Jul 2012 10:44:10 +0900 Subject: [PATCH] Fix Keyboard.getKey as thread safe This is a follow up of Id962e670. Change-Id: I9e8542bff9e8faf57f934051fe612463c99ad61f --- .../inputmethod/keyboard/Keyboard.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index 1b4cea2e7..1aec00129 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -185,19 +185,21 @@ public class Keyboard { if (code == CODE_UNSPECIFIED) { return null; } - final int index = mKeyCache.indexOfKey(code); - if (index >= 0) { - return mKeyCache.valueAt(index); - } - - for (final Key key : mKeys) { - if (key.mCode == code) { - mKeyCache.put(code, key); - return key; + synchronized (mKeyCache) { + final int index = mKeyCache.indexOfKey(code); + if (index >= 0) { + return mKeyCache.valueAt(index); } + + for (final Key key : mKeys) { + if (key.mCode == code) { + mKeyCache.put(code, key); + return key; + } + } + mKeyCache.put(code, null); + return null; } - mKeyCache.put(code, null); - return null; } public boolean hasKey(Key aKey) {