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
This commit is contained in:
Gopal Krishna Shukla
2019-12-20 00:07:16 +05:30
committed by Gopal Shukla
parent 4bef55860f
commit 068d7a21a4

View File

@@ -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);