Fix a possible deadlock.
Bug: 5359873 Change-Id: I80ae901c43b6ae59879e3c8b1a9dd8a937d558c1
This commit is contained in:
parent
acf6b6815a
commit
a9876980c8
1 changed files with 32 additions and 17 deletions
|
@ -334,10 +334,19 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
|
||||||
final String text = textInfo.getText();
|
final String text = textInfo.getText();
|
||||||
|
|
||||||
if (shouldFilterOut(text)) {
|
if (shouldFilterOut(text)) {
|
||||||
final DictAndProximity dictInfo = mDictionaryPool.takeOrGetNull();
|
DictAndProximity dictInfo = null;
|
||||||
|
try {
|
||||||
|
dictInfo = mDictionaryPool.takeOrGetNull();
|
||||||
if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS;
|
if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS;
|
||||||
return dictInfo.mDictionary.isValidWord(text) ? IN_DICT_EMPTY_SUGGESTIONS
|
return dictInfo.mDictionary.isValidWord(text) ? IN_DICT_EMPTY_SUGGESTIONS
|
||||||
: NOT_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 =
|
final SuggestionsGatherer suggestionsGatherer =
|
||||||
|
@ -361,7 +370,9 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
|
||||||
|
|
||||||
final int capitalizeType = getCapitalizationType(text);
|
final int capitalizeType = getCapitalizationType(text);
|
||||||
boolean isInDict = true;
|
boolean isInDict = true;
|
||||||
final DictAndProximity dictInfo = mDictionaryPool.takeOrGetNull();
|
DictAndProximity dictInfo = null;
|
||||||
|
try {
|
||||||
|
dictInfo = mDictionaryPool.takeOrGetNull();
|
||||||
if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS;
|
if (null == dictInfo) return NOT_IN_DICT_EMPTY_SUGGESTIONS;
|
||||||
dictInfo.mDictionary.getWords(composer, suggestionsGatherer,
|
dictInfo.mDictionary.getWords(composer, suggestionsGatherer,
|
||||||
dictInfo.mProximityInfo);
|
dictInfo.mProximityInfo);
|
||||||
|
@ -372,9 +383,13 @@ public class AndroidSpellCheckerService extends SpellCheckerService {
|
||||||
// want to test a lowercase version of it.
|
// want to test a lowercase version of it.
|
||||||
isInDict = dictInfo.mDictionary.isValidWord(text.toLowerCase(mLocale));
|
isInDict = dictInfo.mDictionary.isValidWord(text.toLowerCase(mLocale));
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
if (null != dictInfo) {
|
||||||
if (!mDictionaryPool.offer(dictInfo)) {
|
if (!mDictionaryPool.offer(dictInfo)) {
|
||||||
Log.e(TAG, "Can't re-insert a dictionary into its pool");
|
Log.e(TAG, "Can't re-insert a dictionary into its pool");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final SuggestionsGatherer.Result result = suggestionsGatherer.getResults(text,
|
final SuggestionsGatherer.Result result = suggestionsGatherer.getResults(text,
|
||||||
mService.mTypoThreshold, capitalizeType, mLocale);
|
mService.mTypoThreshold, capitalizeType, mLocale);
|
||||||
|
|
Loading…
Reference in a new issue