summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java2
-rw-r--r--services/core/java/com/android/server/am/ProcessRecord.java45
2 files changed, 26 insertions, 21 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 3d02c96ae386..460ce4484a4b 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3393,7 +3393,7 @@ public class ActivityManagerService extends IActivityManager.Stub
mProcessList.noteAppKill(app, ApplicationExitInfo.REASON_OTHER,
ApplicationExitInfo.SUBREASON_UNKNOWN, reason);
}
- ProcessList.killProcessGroup(app.uid, pid);
+ app.killProcessGroupIfNecessaryLocked(true);
synchronized (mProcLock) {
app.setKilled(true);
}
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 335d6768c37b..d6495c78574c 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -1197,26 +1197,7 @@ class ProcessRecord implements WindowProcessListener {
EventLog.writeEvent(EventLogTags.AM_KILL,
userId, mPid, processName, mState.getSetAdj(), reason);
Process.killProcessQuiet(mPid);
- final boolean killProcessGroup;
- if (mHostingRecord != null
- && (mHostingRecord.usesWebviewZygote() || mHostingRecord.usesAppZygote())) {
- synchronized (ProcessRecord.this) {
- killProcessGroup = mProcessGroupCreated;
- if (!killProcessGroup) {
- // The process group hasn't been created, request to skip it.
- mSkipProcessGroupCreation = true;
- }
- }
- } else {
- killProcessGroup = true;
- }
- if (killProcessGroup) {
- if (asyncKPG) {
- ProcessList.killProcessGroup(uid, mPid);
- } else {
- Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL);
- }
- }
+ killProcessGroupIfNecessaryLocked(asyncKPG);
} else {
mPendingStart = false;
}
@@ -1231,6 +1212,30 @@ class ProcessRecord implements WindowProcessListener {
}
}
+ @GuardedBy("mService")
+ void killProcessGroupIfNecessaryLocked(boolean async) {
+ final boolean killProcessGroup;
+ if (mHostingRecord != null
+ && (mHostingRecord.usesWebviewZygote() || mHostingRecord.usesAppZygote())) {
+ synchronized (ProcessRecord.this) {
+ killProcessGroup = mProcessGroupCreated;
+ if (!killProcessGroup) {
+ // The process group hasn't been created, request to skip it.
+ mSkipProcessGroupCreation = true;
+ }
+ }
+ } else {
+ killProcessGroup = true;
+ }
+ if (killProcessGroup) {
+ if (async) {
+ ProcessList.killProcessGroup(uid, mPid);
+ } else {
+ Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL);
+ }
+ }
+ }
+
@Override
public void dumpDebug(ProtoOutputStream proto, long fieldId) {
dumpDebug(proto, fieldId, -1);