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

Commit 0012e8b8 authored by Suren Baghdasaryan's avatar Suren Baghdasaryan
Browse files

Do not crash webview if its group creation fails due to a dead process



Failure by webview to create a process group for newly spawned child is
treated as a fatal error. This is done to avoid leaving children in
the parent's process group because such relationship can lead to
side-effects, like freezing the parent when the child's group is being
frozen.
However, if the child died before it could be added into a process
group, there is no such danger, therefore such failure does not have
to crash the parent process.
Check for this situation and when createProcessGroup() fails because
the child is dead, just log the error and keep going.

Bug: 270103958
Change-Id: I129da0838fc14ac0dbda43de49bcf47918f1822d
Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
parent f4abf286
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ import android.os.Trace;
import android.os.UserHandle;
import android.os.storage.StorageManagerInternal;
import android.system.Os;
import android.system.OsConstants;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -2328,9 +2329,15 @@ public final class ProcessList {

            if (!regularZygote) {
                // webview and app zygote don't have the permission to create the nodes
                if (Process.createProcessGroup(uid, startResult.pid) < 0) {
                    throw new AssertionError("Unable to create process group for " + app.processName
                            + " (" + startResult.pid + ")");
                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 "
                            + app.processName + " (" + startResult.pid + ")");
                    } else {
                        throw new AssertionError("Unable to create process group for "
                            + app.processName + " (" + startResult.pid + ")");
                    }
                }
            }