summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2010-03-01 09:30:21 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2010-03-01 09:30:21 -0800
commit4dcd2ee8cacc9b4c396b8611189595fd9bb7bcad (patch)
tree18f73680e6345b765b659ea1bf390e003d5366ac
parentfc7028f1c68dcc8d59c8e4daf4a8917a3d9a7558 (diff)
parent7bb2581e6f404da0edba9ebb81b0d0593715eb40 (diff)
downloadframeworks_base-4dcd2ee8cacc9b4c396b8611189595fd9bb7bcad.zip
frameworks_base-4dcd2ee8cacc9b4c396b8611189595fd9bb7bcad.tar.gz
frameworks_base-4dcd2ee8cacc9b4c396b8611189595fd9bb7bcad.tar.bz2
merge from open-source master
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java24
1 files changed, 19 insertions, 5 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 1a22a26a..5f6356d 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -1905,11 +1905,16 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
+ " app=" + app + " knownToBeDead=" + knownToBeDead
+ " thread=" + (app != null ? app.thread : null)
+ " pid=" + (app != null ? app.pid : -1));
- if (app != null &&
- (!knownToBeDead || app.thread == null) && app.pid > 0) {
- return app;
+ if (app != null && app.pid > 0) {
+ if (!knownToBeDead || app.thread == null) {
+ return app;
+ } else {
+ // An application record is attached to a previous process,
+ // clean it up now.
+ handleAppDiedLocked(app, true);
+ }
}
-
+
String hostingNameStr = hostingName != null
? hostingName.flattenToShortString() : null;
@@ -4553,7 +4558,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
mProcDeaths[0]++;
- if (app.thread != null && app.thread.asBinder() == thread.asBinder()) {
+ // Clean up already done if the process has been re-started.
+ if (app.pid == pid && app.thread != null &&
+ app.thread.asBinder() == thread.asBinder()) {
Log.i(TAG, "Process " + app.processName + " (pid " + pid
+ ") has died.");
EventLog.writeEvent(LOG_AM_PROCESS_DIED, app.pid, app.processName);
@@ -4603,6 +4610,11 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
scheduleAppGcsLocked();
}
}
+ } else if (app.pid != pid) {
+ // A new process has already been started.
+ Log.i(TAG, "Process " + app.processName + " (pid " + pid
+ + ") has died and restarted (pid " + app.pid + ").");
+ EventLog.writeEvent(LOG_AM_PROCESS_DIED, pid, app.processName);
} else if (Config.LOGD) {
Log.d(TAG, "Received spurious death notification for thread "
+ thread.asBinder());
@@ -5424,6 +5436,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
finishReceiverLocked(br.receiver, br.resultCode, br.resultData,
br.resultExtras, br.resultAbort, true);
scheduleBroadcastsLocked();
+ // We need to reset the state if we fails to start the receiver.
+ br.state = BroadcastRecord.IDLE;
}
}