Revert "Wait for the previous app process died before restarting it"
This reverts commit f135a423501b49c3bd71e55064c64447bc99506b.
Reason for revert: The previous fix would relinquish the global AM lock and result race conditions
Change-Id: Ic56b97cd2bf1ec0c80d012bda719649be7e61ec8
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 967da96..770db58 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3783,7 +3783,7 @@
}
@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 375da8a..2bb7035 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 @@
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 @@
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 @@
// 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) {