From 068d7a21a418407a69c868c12bf6b7d5bd4f6cf5 Mon Sep 17 00:00:00 2001 From: Gopal Krishna Shukla Date: Fri, 20 Dec 2019 00:07:16 +0530 Subject: [PATCH] Avoid IOB while bringDownDisabledPackageServicesLocked() bringDownServiceLocked may lead to runtime exception which can again invoke bringDownDisabledPackageServicesLocked on the package and since mTmpCollectionResults is global it might be cleaned in subsequent call. Test: Monkey or directed (see bug) Bug: 146547048 Change-Id: Ic77bbf7fc1c424b4479c10f6b8887be04ab1de3f --- .../java/com/android/server/am/ActiveServices.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index f021008cef7d9..5833d165f380e 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -272,6 +272,7 @@ public final class ActiveServices { static final int MSG_BG_START_TIMEOUT = 1; static final int MSG_UPDATE_FOREGROUND_APPS = 2; + static final int MSG_ENSURE_NOT_START_BG = 3; ServiceMap(Looper looper, int userId) { super(looper); @@ -289,6 +290,11 @@ public final class ActiveServices { case MSG_UPDATE_FOREGROUND_APPS: { updateForegroundApps(this); } break; + case MSG_ENSURE_NOT_START_BG: { + synchronized (mAm) { + rescheduleDelayedStartsLocked(); + } + } break; } } @@ -296,7 +302,9 @@ public final class ActiveServices { if (mStartingBackground.remove(r)) { if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "No longer background starting: " + r); - rescheduleDelayedStartsLocked(); + removeMessages(MSG_ENSURE_NOT_START_BG); + Message msg = obtainMessage(MSG_ENSURE_NOT_START_BG); + sendMessage(msg); } if (mDelayedStartList.remove(r)) { if (DEBUG_DELAYED_STARTS) Slog.v(TAG_SERVICE, "No longer delaying start: " + r);