File tree Expand file tree Collapse file tree 1 file changed +9
-1
lines changed
services/java/com/android/server Expand file tree Collapse file tree 1 file changed +9
-1
lines changed Original file line number Diff line number Diff line change @@ -392,9 +392,16 @@ public void finishSpellCheckerService(ISpellCheckerSessionListener listener) {
392392 Slog .d (TAG , "FinishSpellCheckerService" );
393393 }
394394 synchronized (mSpellCheckerMap ) {
395+ final ArrayList <SpellCheckerBindGroup > removeList =
396+ new ArrayList <SpellCheckerBindGroup >();
395397 for (SpellCheckerBindGroup group : mSpellCheckerBindGroups .values ()) {
396398 if (group == null ) continue ;
397- group .removeListener (listener );
399+ // Use removeList to avoid modifying mSpellCheckerBindGroups in this loop.
400+ removeList .add (group );
401+ }
402+ final int removeSize = removeList .size ();
403+ for (int i = 0 ; i < removeSize ; ++i ) {
404+ removeList .get (i ).removeListener (listener );
398405 }
399406 }
400407 }
@@ -669,6 +676,7 @@ public void removeListener(ISpellCheckerSessionListener listener) {
669676 }
670677 }
671678
679+ // cleanLocked may remove elements from mSpellCheckerBindGroups
672680 private void cleanLocked () {
673681 if (DBG ) {
674682 Slog .d (TAG , "cleanLocked" );
You can’t perform that action at this time.
0 commit comments