summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author desuo wang <wangdesuo@oppo.com> 2022-06-13 10:22:36 +0800
committer desuo wang <wangdesuo@oppo.com> 2022-06-16 06:53:10 +0000
commita2461a3faa1566fff7825a9404f628bfcd3f4a99 (patch)
tree108cef124f1f589524f54b9772943a4d8998f2ac
parent030c47cbfb8f2f46cd0a5a0e772b2a794cf586d8 (diff)
Recheck the condition before really killing
Since the kill is asynchronously scheduled in the Handler, logically, before scheduling, the process may be operated by the user to the foreground or raising to an important ADJ and then be killed abnormally. Bug: 235565625 Change-Id: Ied40d3ad22caa4d6c89055fdf85affb905d44d23
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java8
1 files changed, 8 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index fd109ff12ba6..291b0d725a3b 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -14349,6 +14349,10 @@ public class ActivityManagerService extends IActivityManager.Stub
app.processName, app.toShortString(), cpuLimit, app)) {
mHandler.post(() -> {
synchronized (ActivityManagerService.this) {
+ if (app.getThread() == null
+ || app.mState.getSetProcState() < ActivityManager.PROCESS_STATE_HOME) {
+ return;
+ }
app.killLocked("excessive cpu " + cpuTimeUsed + " during "
+ uptimeSince + " dur=" + checkDur + " limit=" + cpuLimit,
ApplicationExitInfo.REASON_EXCESSIVE_RESOURCE_USAGE,
@@ -14374,6 +14378,10 @@ public class ActivityManagerService extends IActivityManager.Stub
app.processName, r.toString(), cpuLimit, app)) {
mHandler.post(() -> {
synchronized (ActivityManagerService.this) {
+ if (app.getThread() == null
+ || app.mState.getSetProcState() < ActivityManager.PROCESS_STATE_HOME) {
+ return;
+ }
mPhantomProcessList.killPhantomProcessGroupLocked(app, r,
ApplicationExitInfo.REASON_EXCESSIVE_RESOURCE_USAGE,
ApplicationExitInfo.SUBREASON_EXCESSIVE_CPU,