diff options
author | 2014-02-21 11:37:09 +0000 | |
---|---|---|
committer | 2014-02-21 11:37:09 +0000 | |
commit | bb6b978a190e552eefa31426595db93705d50c1f (patch) | |
tree | 09f6bf8aa0d918599f60e4edb522f3fe3eb3178b /java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java | |
parent | bf075b21a1b85c9aa382276e95d3986d3d6d5b1d (diff) | |
parent | d24a99cff6da3a7121a507e77409261e4f6704dc (diff) | |
download | latinime-bb6b978a190e552eefa31426595db93705d50c1f.tar.gz latinime-bb6b978a190e552eefa31426595db93705d50c1f.tar.xz latinime-bb6b978a190e552eefa31426595db93705d50c1f.zip |
Merge "Fix: file descriptor leaking."
Diffstat (limited to 'java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java index 71e120c5f..bf776cfc5 100644 --- a/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java +++ b/java/src/com/android/inputmethod/latin/makedict/Ver2DictDecoder.java @@ -120,16 +120,10 @@ public class Ver2DictDecoder extends AbstractDictDecoder { // used only for testing. private final DictionaryBufferFactory mBufferFactory; protected DictBuffer mDictBuffer; - private final BinaryDictionary mBinaryDictionary; /* package */ Ver2DictDecoder(final File file, final int factoryFlag) { mDictionaryBinaryFile = file; mDictBuffer = null; - // dictType is not being used in dicttool. Passing an empty string. - mBinaryDictionary = new BinaryDictionary(file.getAbsolutePath(), - 0 /* offset */, file.length() /* length */, true /* useFullEditDistance */, - null /* locale */, "" /* dictType */, false /* isUpdatable */); - if ((factoryFlag & MASK_DICTBUFFER) == USE_READONLY_BYTEBUFFER) { mBufferFactory = new DictionaryBufferFromReadOnlyByteBufferFactory(); } else if ((factoryFlag & MASK_DICTBUFFER) == USE_BYTEARRAY) { @@ -144,10 +138,6 @@ public class Ver2DictDecoder extends AbstractDictDecoder { /* package */ Ver2DictDecoder(final File file, final DictionaryBufferFactory factory) { mDictionaryBinaryFile = file; mBufferFactory = factory; - // dictType is not being used in dicttool. Passing an empty string. - mBinaryDictionary = new BinaryDictionary(file.getAbsolutePath(), - 0 /* offset */, file.length() /* length */, true /* useFullEditDistance */, - null /* locale */, "" /* dictType */, false /* isUpdatable */); } @Override @@ -172,7 +162,13 @@ public class Ver2DictDecoder extends AbstractDictDecoder { @Override public DictionaryHeader readHeader() throws IOException, UnsupportedFormatException { - final DictionaryHeader header = mBinaryDictionary.getHeader(); + // dictType is not being used in dicttool. Passing an empty string. + final BinaryDictionary binaryDictionary = new BinaryDictionary( + mDictionaryBinaryFile.getAbsolutePath(), 0 /* offset */, + mDictionaryBinaryFile.length() /* length */, true /* useFullEditDistance */, + null /* locale */, "" /* dictType */, false /* isUpdatable */); + final DictionaryHeader header = binaryDictionary.getHeader(); + binaryDictionary.close(); if (header == null) { throw new IOException("Cannot read the dictionary header."); } @@ -254,6 +250,11 @@ public class Ver2DictDecoder extends AbstractDictDecoder { @Override public FusionDictionary readDictionaryBinary(final boolean deleteDictIfBroken) throws FileNotFoundException, IOException, UnsupportedFormatException { + // dictType is not being used in dicttool. Passing an empty string. + final BinaryDictionary binaryDictionary = new BinaryDictionary( + mDictionaryBinaryFile.getAbsolutePath(), 0 /* offset */, + mDictionaryBinaryFile.length() /* length */, true /* useFullEditDistance */, + null /* locale */, "" /* dictType */, false /* isUpdatable */); final DictionaryHeader header = readHeader(); final FusionDictionary fusionDict = new FusionDictionary(new FusionDictionary.PtNodeArray(), header.mDictionaryOptions); @@ -261,11 +262,11 @@ public class Ver2DictDecoder extends AbstractDictDecoder { final ArrayList<WordProperty> wordProperties = CollectionUtils.newArrayList(); do { final BinaryDictionary.GetNextWordPropertyResult result = - mBinaryDictionary.getNextWordProperty(token); + binaryDictionary.getNextWordProperty(token); final WordProperty wordProperty = result.mWordProperty; if (wordProperty == null) { + binaryDictionary.close(); if (deleteDictIfBroken) { - mBinaryDictionary.close(); mDictionaryBinaryFile.delete(); } return null; @@ -294,6 +295,7 @@ public class Ver2DictDecoder extends AbstractDictDecoder { fusionDict.setBigram(word0, bigram.mWord, bigram.mProbabilityInfo); } } + binaryDictionary.close(); return fusionDict; } |