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,
|
||||
ApplicationExitInfo.SUBREASON_UNKNOWN, reason);
|
||||
}
|
||||
ProcessList.killProcessGroup(app.uid, pid);
|
||||
app.killProcessGroupIfNecessaryLocked(true);
|
||||
synchronized (mProcLock) {
|
||||
app.setKilled(true);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user