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) {
|
if (!isolated) {
|
||||||
app = getProcessRecordLocked(processName, info.uid, keepIfLarge);
|
app = getProcessRecordLocked(processName, info.uid, keepIfLarge);
|
||||||
checkTime(startTime, "startProcess: after getProcessRecord");
|
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 {
|
} else {
|
||||||
// If this is an isolated process, it can't re-use an existing process.
|
// If this is an isolated process, it can't re-use an existing process.
|
||||||
app = null;
|
app = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't have to do anything more if:
|
// We don't have to do anything more if:
|
||||||
// (1) There is an existing application record; and
|
// (1) There is an existing application record; and
|
||||||
// (2) The caller doesn't think it is dead, OR there is no thread
|
// (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
|
String hostingNameStr = hostingName != null
|
||||||
? hostingName.flattenToShortString() : 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) {
|
if (app == null) {
|
||||||
checkTime(startTime, "startProcess: creating new process record");
|
checkTime(startTime, "startProcess: creating new process record");
|
||||||
app = newProcessRecordLocked(info, processName, isolated, isolatedUid);
|
app = newProcessRecordLocked(info, processName, isolated, isolatedUid);
|
||||||
|
|||||||
Reference in New Issue
Block a user