Merge "Fix the processgroup creation failure due to race conditions" into udc-dev

This commit is contained in:
Jing Ji
2023-05-26 07:55:40 +00:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 21 deletions

View File

@@ -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);
}

View File

@@ -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);