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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user