Make the spell checker re-entrant.
Until the dictionary itself is re-entrant, unfortunately we have
to synchronize accesses to it.
Bug: 5156851
Change-Id: I1629a160d707e6fa1ad80cba828798abb24b68b1
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 44e9995..d2b6bcd 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -126,7 +126,7 @@
// Note : this must be reentrant
/**
* Gets a list of suggestions for a specific string. This returns a list of possible
- * corrections for the text passed as an arguments. It may split or group words, and
+ * corrections for the text passed as an argument. It may split or group words, and
* even perform grammatical analysis.
*/
@Override
@@ -153,9 +153,14 @@
composer.add(character, proximities,
WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE);
}
- dictionary.getWords(composer, suggestionsGatherer, mProximityInfo);
- final boolean isInDict = dictionary.isValidWord(text);
- final String[] suggestions = suggestionsGatherer.getGatheredSuggestions();
+ final boolean isInDict;
+ final String[] suggestions;
+ synchronized(dictionary) {
+ // TODO: make the dictionary reentrant so that we don't have to synchronize here
+ dictionary.getWords(composer, suggestionsGatherer, mProximityInfo);
+ isInDict = dictionary.isValidWord(text);
+ suggestions = suggestionsGatherer.getGatheredSuggestions();
+ }
final int flags =
(isInDict ? SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY : 0)