Merge "Fix the processgroup creation failure due to race conditions" into udc-dev am: 9aad77c55b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23425042

Change-Id: Ie3dc6321853c152658d2bf13992727e0e8a44d1f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jing Ji
2023-05-26 08:42:01 +00:00
committed by Automerger Merge Worker
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, mProcessList.noteAppKill(app, ApplicationExitInfo.REASON_OTHER,
ApplicationExitInfo.SUBREASON_UNKNOWN, reason); ApplicationExitInfo.SUBREASON_UNKNOWN, reason);
} }
ProcessList.killProcessGroup(app.uid, pid); app.killProcessGroupIfNecessaryLocked(true);
synchronized (mProcLock) { synchronized (mProcLock) {
app.setKilled(true); app.setKilled(true);
} }

View File

@@ -1197,6 +1197,23 @@ class ProcessRecord implements WindowProcessListener {
EventLog.writeEvent(EventLogTags.AM_KILL, EventLog.writeEvent(EventLogTags.AM_KILL,
userId, mPid, processName, mState.getSetAdj(), reason); userId, mPid, processName, mState.getSetAdj(), reason);
Process.killProcessQuiet(mPid); Process.killProcessQuiet(mPid);
killProcessGroupIfNecessaryLocked(asyncKPG);
} else {
mPendingStart = false;
}
if (!mPersistent) {
synchronized (mProcLock) {
mKilled = true;
mKilledByAm = true;
mKillTime = SystemClock.uptimeMillis();
}
}
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
}
@GuardedBy("mService")
void killProcessGroupIfNecessaryLocked(boolean async) {
final boolean killProcessGroup; final boolean killProcessGroup;
if (mHostingRecord != null if (mHostingRecord != null
&& (mHostingRecord.usesWebviewZygote() || mHostingRecord.usesAppZygote())) { && (mHostingRecord.usesWebviewZygote() || mHostingRecord.usesAppZygote())) {
@@ -1211,24 +1228,12 @@ class ProcessRecord implements WindowProcessListener {
killProcessGroup = true; killProcessGroup = true;
} }
if (killProcessGroup) { if (killProcessGroup) {
if (asyncKPG) { if (async) {
ProcessList.killProcessGroup(uid, mPid); ProcessList.killProcessGroup(uid, mPid);
} else { } else {
Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL); Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL);
} }
} }
} else {
mPendingStart = false;
}
if (!mPersistent) {
synchronized (mProcLock) {
mKilled = true;
mKilledByAm = true;
mKillTime = SystemClock.uptimeMillis();
}
}
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
}
} }
@Override @Override