Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4408ff8 authored by Jing Ji's avatar Jing Ji Committed by Automerger Merge Worker
Browse files

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

parents a3775f8f 9aad77c5
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
            }
            }
+25 −20
Original line number Original line Diff line number Diff line
@@ -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