From 4190fc52e1e28b5750b47eb1c2afcdccbbd406bd Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Mon, 9 Dec 2013 18:20:16 -0800 Subject: [PATCH] Fix crash: W/BinderNative( 667): Uncaught exception from death notification W/BinderNative( 667): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 W/BinderNative( 667): at android.util.ArraySet.valueAt(ArraySet.java:301) W/BinderNative( 667): at com.android.server.am.ActiveServices.killServicesLocked(ActiveServices.java:2069) W/BinderNative( 667): at com.android.server.am.ActivityManagerService.cleanUpApplicationRecordLocked(ActivityManagerService.java:12412) W/BinderNative( 667): at com.android.server.am.ActivityManagerService.handleAppDiedLocked(ActivityManagerService.java:3596) W/BinderNative( 667): at com.android.server.am.ActivityManagerService.appDiedLocked(ActivityManagerService.java:3744) W/BinderNative( 667): at com.android.server.am.ActivityManagerService$AppDeathRecipient.binderDied(ActivityManagerService.java:1024) W/BinderNative( 667): at android.os.BinderProxy.sendDeathNotice(Binder.java:493) W/BinderNative( 667): at dalvik.system.NativeStart.run(Native Method) Change-Id: I5cd03187dfaa8ec25c7db34ad10e2b6c089c468c --- services/java/com/android/server/am/ActiveServices.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/java/com/android/server/am/ActiveServices.java b/services/java/com/android/server/am/ActiveServices.java index 3752ccb6f192d..17bb3e0f525bf 100644 --- a/services/java/com/android/server/am/ActiveServices.java +++ b/services/java/com/android/server/am/ActiveServices.java @@ -2071,16 +2071,15 @@ public final class ActiveServices { // Unless the process is persistent, this process record is going away, // so make sure the service is cleaned out of it. if (!app.persistent) { - app.services.remove(sr); + app.services.removeAt(i); } // Sanity check: if the service listed for the app is not one - // we actually are maintaining, drop it. + // we actually are maintaining, just let it drop. if (smap.mServicesByName.get(sr.name) != sr) { ServiceRecord cur = smap.mServicesByName.get(sr.name); Slog.wtf(TAG, "Service " + sr + " in process " + app + " not same as in map: " + cur); - app.services.removeAt(i); continue; }