am 655ef081: Merge "[ActivityManager] Examine bad process before clean up application record"
* commit '655ef08144ec0b71a98b6b3a38e50c6b346ae467': [ActivityManager] Examine bad process before clean up application record
This commit is contained in:
@@ -2790,10 +2790,38 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (!isolated) {
|
||||
app = getProcessRecordLocked(processName, info.uid, keepIfLarge);
|
||||
checkTime(startTime, "startProcess: after getProcessRecord");
|
||||
|
||||
if ((intentFlags & Intent.FLAG_FROM_BACKGROUND) != 0) {
|
||||
// If we are in the background, then check to see if this process
|
||||
// is bad. If so, we will just silently fail.
|
||||
if (mBadProcesses.get(info.processName, info.uid) != null) {
|
||||
if (DEBUG_PROCESSES) Slog.v(TAG, "Bad process: " + info.uid
|
||||
+ "/" + info.processName);
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// When the user is explicitly starting a process, then clear its
|
||||
// crash count so that we won't make it bad until they see at
|
||||
// least one crash dialog again, and make the process good again
|
||||
// if it had been bad.
|
||||
if (DEBUG_PROCESSES) Slog.v(TAG, "Clearing bad process: " + info.uid
|
||||
+ "/" + info.processName);
|
||||
mProcessCrashTimes.remove(info.processName, info.uid);
|
||||
if (mBadProcesses.get(info.processName, info.uid) != null) {
|
||||
EventLog.writeEvent(EventLogTags.AM_PROC_GOOD,
|
||||
UserHandle.getUserId(info.uid), info.uid,
|
||||
info.processName);
|
||||
mBadProcesses.remove(info.processName, info.uid);
|
||||
if (app != null) {
|
||||
app.bad = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If this is an isolated process, it can't re-use an existing process.
|
||||
app = null;
|
||||
}
|
||||
|
||||
// We don't have to do anything more if:
|
||||
// (1) There is an existing application record; and
|
||||
// (2) The caller doesn't think it is dead, OR there is no thread
|
||||
@@ -2827,35 +2855,6 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
String hostingNameStr = hostingName != null
|
||||
? hostingName.flattenToShortString() : null;
|
||||
|
||||
if (!isolated) {
|
||||
if ((intentFlags&Intent.FLAG_FROM_BACKGROUND) != 0) {
|
||||
// If we are in the background, then check to see if this process
|
||||
// is bad. If so, we will just silently fail.
|
||||
if (mBadProcesses.get(info.processName, info.uid) != null) {
|
||||
if (DEBUG_PROCESSES) Slog.v(TAG, "Bad process: " + info.uid
|
||||
+ "/" + info.processName);
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// When the user is explicitly starting a process, then clear its
|
||||
// crash count so that we won't make it bad until they see at
|
||||
// least one crash dialog again, and make the process good again
|
||||
// if it had been bad.
|
||||
if (DEBUG_PROCESSES) Slog.v(TAG, "Clearing bad process: " + info.uid
|
||||
+ "/" + info.processName);
|
||||
mProcessCrashTimes.remove(info.processName, info.uid);
|
||||
if (mBadProcesses.get(info.processName, info.uid) != null) {
|
||||
EventLog.writeEvent(EventLogTags.AM_PROC_GOOD,
|
||||
UserHandle.getUserId(info.uid), info.uid,
|
||||
info.processName);
|
||||
mBadProcesses.remove(info.processName, info.uid);
|
||||
if (app != null) {
|
||||
app.bad = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (app == null) {
|
||||
checkTime(startTime, "startProcess: creating new process record");
|
||||
app = newProcessRecordLocked(info, processName, isolated, isolatedUid);
|
||||
|
||||
Reference in New Issue
Block a user