From 85b598beda98706fafd05c7de9866d83d4a19965 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Wed, 29 Jul 2009 17:23:50 -0700 Subject: [PATCH] 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. --- .../server/AccessibilityManagerService.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/services/java/com/android/server/AccessibilityManagerService.java b/services/java/com/android/server/AccessibilityManagerService.java index 63c9eaac6d741..55007ba701751 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; } }