Merge "Clear traverse sessions when closing."
This commit is contained in:
commit
5fa9654045
1 changed files with 15 additions and 11 deletions
|
@ -35,6 +35,7 @@ import java.util.Locale;
|
||||||
/**
|
/**
|
||||||
* Implements a static, compacted, binary dictionary of standard words.
|
* 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 {
|
public final class BinaryDictionary extends Dictionary {
|
||||||
private static final String TAG = BinaryDictionary.class.getSimpleName();
|
private static final String TAG = BinaryDictionary.class.getSimpleName();
|
||||||
|
|
||||||
|
@ -283,22 +284,23 @@ public final class BinaryDictionary extends Dictionary {
|
||||||
removeBigramWordsNative(mNativeDict, codePoints0, codePoints1);
|
removeBigramWordsNative(mNativeDict, codePoints0, codePoints1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void flush() {
|
private void reopen() {
|
||||||
if (!isValidDictionary()) return;
|
close();
|
||||||
flushNative(mNativeDict, mDictFilePath);
|
|
||||||
closeNative(mNativeDict);
|
|
||||||
final File dictFile = new File(mDictFilePath);
|
final File dictFile = new File(mDictFilePath);
|
||||||
mNativeDict = openNative(dictFile.getAbsolutePath(), 0 /* startOffset */,
|
mNativeDict = openNative(dictFile.getAbsolutePath(), 0 /* startOffset */,
|
||||||
dictFile.length(), true /* isUpdatable */);
|
dictFile.length(), true /* isUpdatable */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void flush() {
|
||||||
|
if (!isValidDictionary()) return;
|
||||||
|
flushNative(mNativeDict, mDictFilePath);
|
||||||
|
reopen();
|
||||||
|
}
|
||||||
|
|
||||||
public void flushWithGC() {
|
public void flushWithGC() {
|
||||||
if (!isValidDictionary()) return;
|
if (!isValidDictionary()) return;
|
||||||
flushWithGCNative(mNativeDict, mDictFilePath);
|
flushWithGCNative(mNativeDict, mDictFilePath);
|
||||||
closeNative(mNativeDict);
|
reopen();
|
||||||
final File dictFile = new File(mDictFilePath);
|
|
||||||
mNativeDict = openNative(dictFile.getAbsolutePath(), 0 /* startOffset */,
|
|
||||||
dictFile.length(), true /* isUpdatable */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean needsToRunGC() {
|
public boolean needsToRunGC() {
|
||||||
|
@ -338,21 +340,23 @@ public final class BinaryDictionary extends Dictionary {
|
||||||
traverseSession.close();
|
traverseSession.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mDicTraverseSessions.clear();
|
||||||
}
|
}
|
||||||
closeInternal();
|
closeInternalLocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void closeInternal() {
|
private synchronized void closeInternalLocked() {
|
||||||
if (mNativeDict != 0) {
|
if (mNativeDict != 0) {
|
||||||
closeNative(mNativeDict);
|
closeNative(mNativeDict);
|
||||||
mNativeDict = 0;
|
mNativeDict = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Manage BinaryDictionary instances without using WeakReference or something.
|
||||||
@Override
|
@Override
|
||||||
protected void finalize() throws Throwable {
|
protected void finalize() throws Throwable {
|
||||||
try {
|
try {
|
||||||
closeInternal();
|
closeInternalLocked();
|
||||||
} finally {
|
} finally {
|
||||||
super.finalize();
|
super.finalize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue