diff options
| author | 2017-03-28 17:46:10 +0000 | |
|---|---|---|
| committer | 2017-03-28 17:46:16 +0000 | |
| commit | da93d0ea9beee77e11f368ae9b3134a1e33f338a (patch) | |
| tree | c7f72911ac14897aa0339b9ec3cd0cb42e590520 | |
| parent | d686e9c26e84e56810fcf87f6002ba8ba2b3f0c5 (diff) | |
| parent | da5790de786ff2bc07928d5975c7e4e2709cf41b (diff) | |
Merge "Fix double-checked locking in InputMethodSubtype" into oc-dev
| -rw-r--r-- | core/java/android/view/inputmethod/InputMethodSubtype.java | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java index 44309a7b68c2..28c2d016f6db 100644 --- a/core/java/android/view/inputmethod/InputMethodSubtype.java +++ b/core/java/android/view/inputmethod/InputMethodSubtype.java @@ -520,27 +520,27 @@ public final class InputMethodSubtype implements Parcelable { } private HashMap<String, String> getExtraValueHashMap() { - if (mExtraValueHashMapCache == null) { - synchronized(this) { - if (mExtraValueHashMapCache == null) { - mExtraValueHashMapCache = new HashMap<String, String>(); - final String[] pairs = mSubtypeExtraValue.split(EXTRA_VALUE_PAIR_SEPARATOR); - final int N = pairs.length; - for (int i = 0; i < N; ++i) { - final String[] pair = pairs[i].split(EXTRA_VALUE_KEY_VALUE_SEPARATOR); - if (pair.length == 1) { - mExtraValueHashMapCache.put(pair[0], null); - } else if (pair.length > 1) { - if (pair.length > 2) { - Slog.w(TAG, "ExtraValue has two or more '='s"); - } - mExtraValueHashMapCache.put(pair[0], pair[1]); - } + synchronized (this) { + HashMap<String, String> extraValueMap = mExtraValueHashMapCache; + if (extraValueMap != null) { + return extraValueMap; + } + extraValueMap = new HashMap<>(); + final String[] pairs = mSubtypeExtraValue.split(EXTRA_VALUE_PAIR_SEPARATOR); + for (int i = 0; i < pairs.length; ++i) { + final String[] pair = pairs[i].split(EXTRA_VALUE_KEY_VALUE_SEPARATOR); + if (pair.length == 1) { + extraValueMap.put(pair[0], null); + } else if (pair.length > 1) { + if (pair.length > 2) { + Slog.w(TAG, "ExtraValue has two or more '='s"); } + extraValueMap.put(pair[0], pair[1]); } } + mExtraValueHashMapCache = extraValueMap; + return extraValueMap; } - return mExtraValueHashMapCache; } /** |