summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-07-29 17:48:56 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-07-29 17:48:56 -0700
commit9c71716e3de9b6a7e1830cae13da35ebdeeaaa80 (patch)
tree26b920a48228e9c7906860f991fa87711147c11d
parent65e5438df929ceb8c44fd930b2a363e021914bd0 (diff)
parent85b598beda98706fafd05c7de9866d83d4a19965 (diff)
downloadframeworks_base-9c71716e3de9b6a7e1830cae13da35ebdeeaaa80.zip
frameworks_base-9c71716e3de9b6a7e1830cae13da35ebdeeaaa80.tar.gz
frameworks_base-9c71716e3de9b6a7e1830cae13da35ebdeeaaa80.tar.bz2
Merge change 9063 into donut
* changes: Fixing bug #2023024 - there is an out of bounds exception that can happen if services are going away as the AccessibilityManagerService is trying to dispatch notifications to these services. Catching this exception and bailing because having this exception means that there are no more services around that need to get this notification.
-rw-r--r--services/java/com/android/server/AccessibilityManagerService.java19
1 files changed, 13 insertions, 6 deletions
diff --git a/services/java/com/android/server/AccessibilityManagerService.java b/services/java/com/android/server/AccessibilityManagerService.java
index 63c9eaa..55007ba 100644
--- a/services/java/com/android/server/AccessibilityManagerService.java
+++ b/services/java/com/android/server/AccessibilityManagerService.java
@@ -323,15 +323,22 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
*/
private void notifyAccessibilityServicesDelayedLocked(AccessibilityEvent event,
boolean isDefault) {
- for (int i = 0, count = mServices.size(); i < count; i++) {
- Service service = mServices.get(i);
+ try {
+ for (int i = 0, count = mServices.size(); i < count; i++) {
+ Service service = mServices.get(i);
- if (service.mIsDefault == isDefault) {
- if (canDispathEventLocked(service, event, mHandledFeedbackTypes)) {
- mHandledFeedbackTypes |= service.mFeedbackType;
- notifyAccessibilityServiceDelayedLocked(service, event);
+ if (service.mIsDefault == isDefault) {
+ if (canDispathEventLocked(service, event, mHandledFeedbackTypes)) {
+ mHandledFeedbackTypes |= service.mFeedbackType;
+ notifyAccessibilityServiceDelayedLocked(service, event);
+ }
}
}
+ } catch (IndexOutOfBoundsException oobe) {
+ // An out of bounds exception can happen if services are going away
+ // as the for loop is running. If that happens, just bail because
+ // there are no more services to notify.
+ return;
}
}