aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2012-08-19 23:26:46 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-08-19 23:26:46 -0700
commit63b842f572a7237411e0552719c61a10561629c3 (patch)
tree6d21e4cc965359b38a4c89c83a72288d935472b6 /java/src
parentbda0632bd63171d8ada218975b6fd7b2bb5fcfe7 (diff)
parent291de5e1c4b5c4be906fdaa13470e4ae6c307779 (diff)
downloadlatinime-63b842f572a7237411e0552719c61a10561629c3.tar.gz
latinime-63b842f572a7237411e0552719c61a10561629c3.tar.xz
latinime-63b842f572a7237411e0552719c61a10561629c3.zip
am 291de5e1: am cb2362ce: Merge "Make some usages of SparseArray thread-safe" into jb-mr1-dev
* commit '291de5e1c4b5c4be906fdaa13470e4ae6c307779': Make some usages of SparseArray thread-safe
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionary.java27
1 files changed, 16 insertions, 11 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index 726c44cc1..2d9e0ce2c 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -64,18 +64,21 @@ public class BinaryDictionary extends Dictionary {
private final SparseArray<DicTraverseSession> mDicTraverseSessions =
new SparseArray<DicTraverseSession>();
+
+ // TODO: There should be a way to remove used DicTraverseSession objects from
+ // {@code mDicTraverseSessions}.
private DicTraverseSession getTraverseSession(int traverseSessionId) {
- DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
- if (traverseSession == null) {
- synchronized(mDicTraverseSessions) {
+ synchronized(mDicTraverseSessions) {
+ DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
+ if (traverseSession == null) {
traverseSession = mDicTraverseSessions.get(traverseSessionId);
if (traverseSession == null) {
traverseSession = new DicTraverseSession(mLocale, mNativeDict);
mDicTraverseSessions.put(traverseSessionId, traverseSession);
}
}
+ return traverseSession;
}
- return traverseSession;
}
/**
@@ -209,18 +212,20 @@ public class BinaryDictionary extends Dictionary {
}
@Override
- public synchronized void close() {
- for (int i = 0; i < mDicTraverseSessions.size(); ++i) {
- final int key = mDicTraverseSessions.keyAt(i);
- final DicTraverseSession traverseSession = mDicTraverseSessions.get(key);
- if (traverseSession != null) {
- traverseSession.close();
+ public void close() {
+ synchronized (mDicTraverseSessions) {
+ final int sessionsSize = mDicTraverseSessions.size();
+ for (int index = 0; index < sessionsSize; ++index) {
+ final DicTraverseSession traverseSession = mDicTraverseSessions.valueAt(index);
+ if (traverseSession != null) {
+ traverseSession.close();
+ }
}
}
closeInternal();
}
- private void closeInternal() {
+ private synchronized void closeInternal() {
if (mNativeDict != 0) {
closeNative(mNativeDict);
mNativeDict = 0;