summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2017-03-28 17:46:10 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-03-28 17:46:16 +0000
commitda93d0ea9beee77e11f368ae9b3134a1e33f338a (patch)
treec7f72911ac14897aa0339b9ec3cd0cb42e590520
parentd686e9c26e84e56810fcf87f6002ba8ba2b3f0c5 (diff)
parentda5790de786ff2bc07928d5975c7e4e2709cf41b (diff)
Merge "Fix double-checked locking in InputMethodSubtype" into oc-dev
-rw-r--r--core/java/android/view/inputmethod/InputMethodSubtype.java34
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;
}
/**