diff options
author | 2011-09-26 02:32:35 -0700 | |
---|---|---|
committer | 2011-09-26 02:32:35 -0700 | |
commit | 722636d9baebdeee97c2f28db6663757ce329450 (patch) | |
tree | ee70bb125b38703b099149eeebd3322bb9514bbc /java | |
parent | fb34a903e041ec995abd56b14f587a311a981842 (diff) | |
parent | b95f4540180fe707c80dc987eaa965342623407b (diff) | |
download | latinime-722636d9baebdeee97c2f28db6663757ce329450.tar.gz latinime-722636d9baebdeee97c2f28db6663757ce329450.tar.xz latinime-722636d9baebdeee97c2f28db6663757ce329450.zip |
am b95f4540: Merge "Fix a possible deadlock."
* commit 'b95f4540180fe707c80dc987eaa965342623407b':
Fix a possible deadlock.
Diffstat (limited to 'java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java index 915c40572..77fbe3ec6 100644 --- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java +++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java @@ -334,10 +334,19 @@ public class AndroidSpellCheckerService extends SpellCheckerService { final String text = textInfo.getText(); if (shouldFilterOut(text)) { - final DictAndProximity dictInfo = mDictionaryPool.takeOrGetNull(); - if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS; - return dictInfo.mDictionary.isValidWord(text) ? IN_DICT_EMPTY_SUGGESTIONS - : NOT_IN_DICT_EMPTY_SUGGESTIONS; + DictAndProximity dictInfo = null; + try { + dictInfo = mDictionaryPool.takeOrGetNull(); + if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS; + return dictInfo.mDictionary.isValidWord(text) ? IN_DICT_EMPTY_SUGGESTIONS + : NOT_IN_DICT_EMPTY_SUGGESTIONS; + } finally { + if (null != dictInfo) { + if (!mDictionaryPool.offer(dictInfo)) { + Log.e(TAG, "Can't re-insert a dictionary into its pool"); + } + } + } } final SuggestionsGatherer suggestionsGatherer = @@ -361,19 +370,25 @@ public class AndroidSpellCheckerService extends SpellCheckerService { final int capitalizeType = getCapitalizationType(text); boolean isInDict = true; - final DictAndProximity dictInfo = mDictionaryPool.takeOrGetNull(); - if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS; - dictInfo.mDictionary.getWords(composer, suggestionsGatherer, - dictInfo.mProximityInfo); - isInDict = dictInfo.mDictionary.isValidWord(text); - if (!isInDict && CAPITALIZE_NONE != capitalizeType) { - // We want to test the word again if it's all caps or first caps only. - // If it's fully down, we already tested it, if it's mixed case, we don't - // want to test a lowercase version of it. - isInDict = dictInfo.mDictionary.isValidWord(text.toLowerCase(mLocale)); - } - if (!mDictionaryPool.offer(dictInfo)) { - Log.e(TAG, "Can't re-insert a dictionary into its pool"); + DictAndProximity dictInfo = null; + try { + dictInfo = mDictionaryPool.takeOrGetNull(); + if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS; + dictInfo.mDictionary.getWords(composer, suggestionsGatherer, + dictInfo.mProximityInfo); + isInDict = dictInfo.mDictionary.isValidWord(text); + if (!isInDict && CAPITALIZE_NONE != capitalizeType) { + // We want to test the word again if it's all caps or first caps only. + // If it's fully down, we already tested it, if it's mixed case, we don't + // want to test a lowercase version of it. + isInDict = dictInfo.mDictionary.isValidWord(text.toLowerCase(mLocale)); + } + } finally { + if (null != dictInfo) { + if (!mDictionaryPool.offer(dictInfo)) { + Log.e(TAG, "Can't re-insert a dictionary into its pool"); + } + } } final SuggestionsGatherer.Result result = suggestionsGatherer.getResults(text, |