From f670ef72354502c7169934af949af42e45e738bb Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Mon, 16 Nov 2009 13:59:16 -0800 Subject: [PATCH] Work on issue 2259506: camera ANRed and then device runtime restarted If a process fails to come up, we could leave content providers and services hanging around. Change-Id: Iff5b8ce3b933580954724338a89e110e45f1b00c --- .../server/am/ActivityManagerService.java | 68 +++++++++++++------ 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index aa79ab4fc6420..3612a9b361d8a 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -185,6 +185,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen static final int LOG_AM_SERVICE_CRASHED_TOO_MUCH = 30034; static final int LOG_AM_SCHEDULE_SERVICE_RESTART = 30035; static final int LOG_AM_PROVIDER_LOST_PROCESS = 30036; + static final int LOG_AM_PROCESS_START_TIMEOUT = 30037; static final int LOG_BOOT_PROGRESS_AMS_READY = 3040; static final int LOG_BOOT_PROGRESS_ENABLE_SCREEN = 3050; @@ -5199,13 +5200,23 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (gone) { Log.w(TAG, "Process " + app + " failed to attach"); + EventLog.writeEvent(LOG_AM_PROCESS_START_TIMEOUT, pid, app.info.uid, + app.processName); mProcessNames.remove(app.processName, app.info.uid); - Process.killProcess(pid); - if (mPendingBroadcast != null && mPendingBroadcast.curApp.pid == pid) { - Log.w(TAG, "Unattached app died before broadcast acknowledged, skipping"); - mPendingBroadcast = null; - scheduleBroadcastsLocked(); + // Take care of any launching providers waiting for this process. + checkAppInLaunchingProvidersLocked(app, true); + // Take care of any services that are waiting for the process. + for (int i=0; i