diff options
Diffstat (limited to 'java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java index dfbfcc7f6..ee294f6b0 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java @@ -28,7 +28,8 @@ public class DictionaryPool extends LinkedBlockingQueue<DictAndProximity> { private final AndroidSpellCheckerService mService; private final int mMaxSize; private final Locale mLocale; - private int mSize = 0; + private int mSize; + private volatile boolean mClosed; public DictionaryPool(final int maxSize, final AndroidSpellCheckerService service, final Locale locale) { @@ -36,6 +37,8 @@ public class DictionaryPool extends LinkedBlockingQueue<DictAndProximity> { mMaxSize = maxSize; mService = service; mLocale = locale; + mSize = 0; + mClosed = false; } @Override @@ -52,4 +55,24 @@ public class DictionaryPool extends LinkedBlockingQueue<DictAndProximity> { } } } + + public void close() { + synchronized(this) { + mClosed = true; + for (DictAndProximity dict : this) { + dict.mDictionary.close(); + } + clear(); + } + } + + @Override + public boolean offer(final DictAndProximity dict) { + if (mClosed) { + dict.mDictionary.close(); + return false; + } else { + return super.offer(dict); + } + } } |