diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ProcessList.java | 9 |
2 files changed, 6 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index e119d1e995b4..5b8ffde6a3e6 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3784,7 +3784,7 @@ public class ActivityManagerService extends IActivityManager.Stub } @GuardedBy("this") - void waitForProcKillLocked(final ProcessRecord app, final String formatString, + private void waitForProcKillLocked(final ProcessRecord app, final String formatString, final long startTime) { app.mAppDiedCallback = () -> { synchronized (ActivityManagerService.this) { diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index 375da8a2f385..2bb703545cad 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -1421,7 +1421,7 @@ public final class ProcessList { if (app.pendingStart) { return true; } - long startTime = SystemClock.uptimeMillis(); + long startTime = SystemClock.elapsedRealtime(); if (app.pid > 0 && app.pid != ActivityManagerService.MY_PID) { checkSlow(startTime, "startProcess: removing from pids map"); mService.mPidsSelfLocked.remove(app); @@ -1856,7 +1856,7 @@ public final class ProcessList { boolean knownToBeDead, int intentFlags, HostingRecord hostingRecord, boolean allowWhileBooting, boolean isolated, int isolatedUid, boolean keepIfLarge, String abiOverride, String entryPoint, String[] entryPointArgs, Runnable crashHandler) { - long startTime = SystemClock.uptimeMillis(); + long startTime = SystemClock.elapsedRealtime(); ProcessRecord app; if (!isolated) { app = getProcessRecordLocked(processName, info.uid, keepIfLarge); @@ -1917,9 +1917,10 @@ public final class ProcessList { // An application record is attached to a previous process, // clean it up now. if (DEBUG_PROCESSES) Slog.v(TAG_PROCESSES, "App died: " + app); + checkSlow(startTime, "startProcess: bad proc running, killing"); ProcessList.killProcessGroup(app.uid, app.pid); - mService.waitForProcKillLocked(app, "startProcess: bad proc running, killing: %s", - startTime); + mService.handleAppDiedLocked(app, true, true); + checkSlow(startTime, "startProcess: done killing old proc"); } if (app == null) { |