Skip to content
Snippets Groups Projects
Commit cb2362ce authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Make some usages of SparseArray thread-safe" into jb-mr1-dev

parents 2cd248ee 8ce351a8
No related branches found
No related tags found
No related merge requests found
...@@ -64,18 +64,21 @@ public class BinaryDictionary extends Dictionary { ...@@ -64,18 +64,21 @@ public class BinaryDictionary extends Dictionary {
private final SparseArray<DicTraverseSession> mDicTraverseSessions = private final SparseArray<DicTraverseSession> mDicTraverseSessions =
new SparseArray<DicTraverseSession>(); new SparseArray<DicTraverseSession>();
// TODO: There should be a way to remove used DicTraverseSession objects from
// {@code mDicTraverseSessions}.
private DicTraverseSession getTraverseSession(int traverseSessionId) { private DicTraverseSession getTraverseSession(int traverseSessionId) {
DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId); synchronized(mDicTraverseSessions) {
if (traverseSession == null) { DicTraverseSession traverseSession = mDicTraverseSessions.get(traverseSessionId);
synchronized(mDicTraverseSessions) { if (traverseSession == null) {
traverseSession = mDicTraverseSessions.get(traverseSessionId); traverseSession = mDicTraverseSessions.get(traverseSessionId);
if (traverseSession == null) { if (traverseSession == null) {
traverseSession = new DicTraverseSession(mLocale, mNativeDict); traverseSession = new DicTraverseSession(mLocale, mNativeDict);
mDicTraverseSessions.put(traverseSessionId, traverseSession); mDicTraverseSessions.put(traverseSessionId, traverseSession);
} }
} }
return traverseSession;
} }
return traverseSession;
} }
/** /**
...@@ -209,18 +212,20 @@ public class BinaryDictionary extends Dictionary { ...@@ -209,18 +212,20 @@ public class BinaryDictionary extends Dictionary {
} }
@Override @Override
public synchronized void close() { public void close() {
for (int i = 0; i < mDicTraverseSessions.size(); ++i) { synchronized (mDicTraverseSessions) {
final int key = mDicTraverseSessions.keyAt(i); final int sessionsSize = mDicTraverseSessions.size();
final DicTraverseSession traverseSession = mDicTraverseSessions.get(key); for (int index = 0; index < sessionsSize; ++index) {
if (traverseSession != null) { final DicTraverseSession traverseSession = mDicTraverseSessions.valueAt(index);
traverseSession.close(); if (traverseSession != null) {
traverseSession.close();
}
} }
} }
closeInternal(); closeInternal();
} }
private void closeInternal() { private synchronized void closeInternal() {
if (mNativeDict != 0) { if (mNativeDict != 0) {
closeNative(mNativeDict); closeNative(mNativeDict);
mNativeDict = 0; mNativeDict = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment