Make some usages of SparseArray thread-safe

This is a follow up of I39d9bf1a7c272eb16d6ed4698f52457579b40f10.

Change-Id: Ic3288e491175f9a85679a21064093f9db5a65466
main
Tadashi G. Takaoka 2012-08-20 14:37:16 +09:00
parent 4c6db0592e
commit 8ce351a827
1 changed files with 16 additions and 11 deletions

View File

@ -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;