Merge "Fix the processgroup creation failure due to race conditions" into udc-dev
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,26 +1197,7 @@ 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);
|
||||||
final boolean killProcessGroup;
|
killProcessGroupIfNecessaryLocked(asyncKPG);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
mPendingStart = false;
|
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
|
@Override
|
||||||
public void dumpDebug(ProtoOutputStream proto, long fieldId) {
|
public void dumpDebug(ProtoOutputStream proto, long fieldId) {
|
||||||
dumpDebug(proto, fieldId, -1);
|
dumpDebug(proto, fieldId, -1);
|
||||||
|
|||||||
Reference in New Issue
Block a user