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

Commit 05f58f6b authored by Ruben Brunk's avatar Ruben Brunk Committed by android-build-merger
Browse files

Fix setVrThread's exception handling. am: 83ea55a9 am: b25be4bd

am: 34e4e80d

Change-Id: Iec0098aa85e3388cadf18f644451189005908065
parents 2350c91a 34e4e80d
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -12550,23 +12550,33 @@ public final class ActivityManagerService extends ActivityManagerNative
            synchronized (mPidsSelfLocked) {
                final int pid = Binder.getCallingPid();
                proc = mPidsSelfLocked.get(pid);
                if (proc != null && mInVrMode && tid >= 0) {
                    // ensure the tid belongs to the process
                    if (!Process.isThreadInProcess(pid, tid)) {
                        throw new IllegalArgumentException("VR thread does not belong to process");
                    }
                    // reset existing VR thread to CFS
                    if (proc.vrThreadTid != 0) {
                    // reset existing VR thread to CFS if this thread still exists and belongs to
                    // the calling process
                    if (proc.vrThreadTid != 0
                            && Process.isThreadInProcess(pid, proc.vrThreadTid)) {
                        try {
                            Process.setThreadScheduler(proc.vrThreadTid, Process.SCHED_OTHER, 0);
                        } catch (IllegalArgumentException e) {
                            // Ignore this.  Only occurs in race condition where previous VR thread
                            // was destroyed during this method call.
                        }
                    }
                    // add check to guarantee that tid belongs to pid?
                    proc.vrThreadTid = tid;
                    // promote to FIFO now if the tid is non-zero
                    if (proc.curSchedGroup == ProcessList.SCHED_GROUP_TOP_APP && proc.vrThreadTid > 0) {
                        Process.setThreadScheduler(proc.vrThreadTid, Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
                    if (proc.curSchedGroup == ProcessList.SCHED_GROUP_TOP_APP
                            && proc.vrThreadTid > 0) {
                        Process.setThreadScheduler(proc.vrThreadTid,
                                Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK, 1);
                    }
                } else {
                    //Slog.e("VR_FIFO", "Didn't set thread from setVrThread?");
                }
            }
        }