diff options
author | 2013-09-25 08:10:07 -0700 | |
---|---|---|
committer | 2013-09-25 08:10:07 -0700 | |
commit | a2174bad22c722f31f864ec1b673661061591fd6 (patch) | |
tree | ca38283f708175d163bdfac401a2027fac8b82e4 /java/src/com/android/inputmethod/latin/BinaryDictionary.java | |
parent | c536d27c697d5851f27302c875654b0545b2696d (diff) | |
parent | 5fa96540456f172b6dbbefe45061738916915cbb (diff) | |
download | latinime-a2174bad22c722f31f864ec1b673661061591fd6.tar.gz latinime-a2174bad22c722f31f864ec1b673661061591fd6.tar.xz latinime-a2174bad22c722f31f864ec1b673661061591fd6.zip |
am 5fa96540: Merge "Clear traverse sessions when closing."
* commit '5fa96540456f172b6dbbefe45061738916915cbb':
Clear traverse sessions when closing.
Diffstat (limited to 'java/src/com/android/inputmethod/latin/BinaryDictionary.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/BinaryDictionary.java | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index 61ccfcfad..fdde98da1 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -35,6 +35,7 @@ import java.util.Locale; /** * Implements a static, compacted, binary dictionary of standard words. */ +// TODO: All methods which should be locked need to have a suffix "Locked". public final class BinaryDictionary extends Dictionary { private static final String TAG = BinaryDictionary.class.getSimpleName(); @@ -283,22 +284,23 @@ public final class BinaryDictionary extends Dictionary { removeBigramWordsNative(mNativeDict, codePoints0, codePoints1); } - public void flush() { - if (!isValidDictionary()) return; - flushNative(mNativeDict, mDictFilePath); - closeNative(mNativeDict); + private void reopen() { + close(); final File dictFile = new File(mDictFilePath); mNativeDict = openNative(dictFile.getAbsolutePath(), 0 /* startOffset */, dictFile.length(), true /* isUpdatable */); } + public void flush() { + if (!isValidDictionary()) return; + flushNative(mNativeDict, mDictFilePath); + reopen(); + } + public void flushWithGC() { if (!isValidDictionary()) return; flushWithGCNative(mNativeDict, mDictFilePath); - closeNative(mNativeDict); - final File dictFile = new File(mDictFilePath); - mNativeDict = openNative(dictFile.getAbsolutePath(), 0 /* startOffset */, - dictFile.length(), true /* isUpdatable */); + reopen(); } public boolean needsToRunGC() { @@ -338,21 +340,23 @@ public final class BinaryDictionary extends Dictionary { traverseSession.close(); } } + mDicTraverseSessions.clear(); } - closeInternal(); + closeInternalLocked(); } - private synchronized void closeInternal() { + private synchronized void closeInternalLocked() { if (mNativeDict != 0) { closeNative(mNativeDict); mNativeDict = 0; } } + // TODO: Manage BinaryDictionary instances without using WeakReference or something. @Override protected void finalize() throws Throwable { try { - closeInternal(); + closeInternalLocked(); } finally { super.finalize(); } |