diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ProcessRecord.java | 45 |
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); |