Skip to content

Commit b94a7fb

Browse files
satok16Android (Google) Code Review
authored andcommitted
Merge "Fix ConcurrentModificationException in TextServicesManagerService" into ics-mr1
2 parents d8ec8db + 4c3fa64 commit b94a7fb

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

services/java/com/android/server/TextServicesManagerService.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff 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");

0 commit comments

Comments
 (0)