Loading services/core/java/com/android/server/am/ProcessList.java +20 −8 Original line number Diff line number Diff line Loading @@ -2300,6 +2300,8 @@ public final class ProcessList { final Process.ProcessStartResult startResult; boolean regularZygote = false; app.mProcessGroupCreated = false; app.mSkipProcessGroupCreation = false; if (hostingRecord.usesWebviewZygote()) { startResult = startWebView(entryPoint, app.processName, uid, uid, gids, runtimeFlags, mountExternal, Loading Loading @@ -2328,19 +2330,29 @@ public final class ProcessList { isTopApp, app.getDisabledCompatChanges(), pkgDataInfoMap, allowlistedAppDataInfoMap, bindMountAppsData, bindMountAppStorageDirs, new String[]{PROC_START_SEQ_IDENT + app.getStartSeq()}); // By now the process group should have been created by zygote. app.mProcessGroupCreated = true; } if (!regularZygote) { // webview and app zygote don't have the permission to create the nodes synchronized (app) { if (!app.mSkipProcessGroupCreation) { // If we're not told to skip the process group creation, go create it. final int res = Process.createProcessGroup(uid, startResult.pid); if (res < 0) { if (res == -OsConstants.ESRCH) { Slog.e(ActivityManagerService.TAG, "Unable to create process group for " Slog.e(ActivityManagerService.TAG, "Unable to create process group for " + app.processName + " (" + startResult.pid + ")"); } else { throw new AssertionError("Unable to create process group for " + app.processName + " (" + startResult.pid + ")"); } } else { app.mProcessGroupCreated = true; } } } } Loading services/core/java/com/android/server/am/ProcessRecord.java +30 −2 Original line number Diff line number Diff line Loading @@ -424,6 +424,16 @@ class ProcessRecord implements WindowProcessListener { */ Runnable mSuccessorStartRunnable; /** * Whether or not the process group of this process has been created. */ volatile boolean mProcessGroupCreated; /** * Whether or not we should skip the process group creation. */ volatile boolean mSkipProcessGroupCreation; void setStartParams(int startUid, HostingRecord hostingRecord, String seInfo, long startUptime, long startElapsedTime) { this.mStartUid = startUid; Loading Loading @@ -1192,8 +1202,26 @@ class ProcessRecord implements WindowProcessListener { EventLog.writeEvent(EventLogTags.AM_KILL, userId, mPid, processName, mState.getSetAdj(), reason); Process.killProcessQuiet(mPid); if (!asyncKPG) Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL); 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); } } } else { mPendingStart = false; } Loading Loading
services/core/java/com/android/server/am/ProcessList.java +20 −8 Original line number Diff line number Diff line Loading @@ -2300,6 +2300,8 @@ public final class ProcessList { final Process.ProcessStartResult startResult; boolean regularZygote = false; app.mProcessGroupCreated = false; app.mSkipProcessGroupCreation = false; if (hostingRecord.usesWebviewZygote()) { startResult = startWebView(entryPoint, app.processName, uid, uid, gids, runtimeFlags, mountExternal, Loading Loading @@ -2328,19 +2330,29 @@ public final class ProcessList { isTopApp, app.getDisabledCompatChanges(), pkgDataInfoMap, allowlistedAppDataInfoMap, bindMountAppsData, bindMountAppStorageDirs, new String[]{PROC_START_SEQ_IDENT + app.getStartSeq()}); // By now the process group should have been created by zygote. app.mProcessGroupCreated = true; } if (!regularZygote) { // webview and app zygote don't have the permission to create the nodes synchronized (app) { if (!app.mSkipProcessGroupCreation) { // If we're not told to skip the process group creation, go create it. final int res = Process.createProcessGroup(uid, startResult.pid); if (res < 0) { if (res == -OsConstants.ESRCH) { Slog.e(ActivityManagerService.TAG, "Unable to create process group for " Slog.e(ActivityManagerService.TAG, "Unable to create process group for " + app.processName + " (" + startResult.pid + ")"); } else { throw new AssertionError("Unable to create process group for " + app.processName + " (" + startResult.pid + ")"); } } else { app.mProcessGroupCreated = true; } } } } Loading
services/core/java/com/android/server/am/ProcessRecord.java +30 −2 Original line number Diff line number Diff line Loading @@ -424,6 +424,16 @@ class ProcessRecord implements WindowProcessListener { */ Runnable mSuccessorStartRunnable; /** * Whether or not the process group of this process has been created. */ volatile boolean mProcessGroupCreated; /** * Whether or not we should skip the process group creation. */ volatile boolean mSkipProcessGroupCreation; void setStartParams(int startUid, HostingRecord hostingRecord, String seInfo, long startUptime, long startElapsedTime) { this.mStartUid = startUid; Loading Loading @@ -1192,8 +1202,26 @@ class ProcessRecord implements WindowProcessListener { EventLog.writeEvent(EventLogTags.AM_KILL, userId, mPid, processName, mState.getSetAdj(), reason); Process.killProcessQuiet(mPid); if (!asyncKPG) Process.sendSignalToProcessGroup(uid, mPid, OsConstants.SIGKILL); 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); } } } else { mPendingStart = false; } Loading