Merge "Fix ConcurrentModificationException in TextServicesManagerService" into ics-mr1
This commit is contained in:
@ -392,9 +392,16 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
Slog.d(TAG, "FinishSpellCheckerService");
|
Slog.d(TAG, "FinishSpellCheckerService");
|
||||||
}
|
}
|
||||||
synchronized(mSpellCheckerMap) {
|
synchronized(mSpellCheckerMap) {
|
||||||
|
final ArrayList<SpellCheckerBindGroup> removeList =
|
||||||
|
new ArrayList<SpellCheckerBindGroup>();
|
||||||
for (SpellCheckerBindGroup group : mSpellCheckerBindGroups.values()) {
|
for (SpellCheckerBindGroup group : mSpellCheckerBindGroups.values()) {
|
||||||
if (group == null) continue;
|
if (group == null) continue;
|
||||||
group.removeListener(listener);
|
// Use removeList to avoid modifying mSpellCheckerBindGroups in this loop.
|
||||||
|
removeList.add(group);
|
||||||
|
}
|
||||||
|
final int removeSize = removeList.size();
|
||||||
|
for (int i = 0; i < removeSize; ++i) {
|
||||||
|
removeList.get(i).removeListener(listener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -669,6 +676,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cleanLocked may remove elements from mSpellCheckerBindGroups
|
||||||
private void cleanLocked() {
|
private void cleanLocked() {
|
||||||
if (DBG) {
|
if (DBG) {
|
||||||
Slog.d(TAG, "cleanLocked");
|
Slog.d(TAG, "cleanLocked");
|
||||||
|
Reference in New Issue
Block a user