diff options
author | 2012-08-19 23:23:08 -0700 | |
---|---|---|
committer | 2012-08-19 23:23:08 -0700 | |
commit | cb2362cee1a6700fb15730e12a62ae2004baae4f (patch) | |
tree | 569326f90b12a8d13c447b0527f78e43563014a2 /java | |
parent | 2cd248ee05009385f1c67aafede6a776f937ec06 (diff) | |
parent | 8ce351a8275f0ad73cdd642e8b46a430b072e8ef (diff) | |
download | latinime-cb2362cee1a6700fb15730e12a62ae2004baae4f.tar.gz latinime-cb2362cee1a6700fb15730e12a62ae2004baae4f.tar.xz latinime-cb2362cee1a6700fb15730e12a62ae2004baae4f.zip |
Merge "Make some usages of SparseArray thread-safe" into jb-mr1-dev
Diffstat (limited to 'java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/BinaryDictionary.java | 27 |
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; |