diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2010-03-01 09:30:21 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2010-03-01 09:30:21 -0800 |
commit | 4dcd2ee8cacc9b4c396b8611189595fd9bb7bcad (patch) | |
tree | 18f73680e6345b765b659ea1bf390e003d5366ac | |
parent | fc7028f1c68dcc8d59c8e4daf4a8917a3d9a7558 (diff) | |
parent | 7bb2581e6f404da0edba9ebb81b0d0593715eb40 (diff) | |
download | frameworks_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.java | 24 |
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; } } |