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

Commit bcd744e6 authored by Sergii Skorokhodov's avatar Sergii Skorokhodov Committed by Steve Kondik
Browse files

Correct check of is user running

Before the ActivityManagerService sends an intent or
starts an activity it checks if target user is in
mStartedUsers array.

When removing a non-owner user process the
UserStartedState instance will still be in mStartedUsers
array with mState STOPPING or SHUTDOWN.

This should be checked before sending an intent or start
an activity.

isUserRunningLocked(...) will interpret mState STOPPING
and SHUTDOWN as a non running user.

Change-Id: I1b51bcdb62bdd0f6dbe05dab4d529d4ad40d0d44
parent ffb46c84
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -9460,9 +9460,9 @@ public final class ActivityManagerService extends ActivityManagerNative
                            "Attempt to launch content provider before system ready");
                }
                // Make sure that the user who owns this provider is started.  If not,
                // Make sure that the user who owns this provider is running.  If not,
                // we don't want to allow it to run.
                if (mStartedUsers.get(userId) == null) {
                if (!isUserRunningLocked(userId, false)) {
                    Slog.w(TAG, "Unable to launch app "
                            + cpi.applicationInfo.packageName + "/"
                            + cpi.applicationInfo.uid + " for provider "
@@ -15558,10 +15558,10 @@ public final class ActivityManagerService extends ActivityManagerNative
        userId = handleIncomingUser(callingPid, callingUid, userId,
                true, ALLOW_NON_FULL, "broadcast", callerPackage);
        // Make sure that the user who is receiving this broadcast is started.
        // Make sure that the user who is receiving this broadcast is running.
        // If not, we will just skip it.
        if (userId != UserHandle.USER_ALL && mStartedUsers.get(userId) == null) {
        if (userId != UserHandle.USER_ALL && !isUserRunningLocked(userId, false)) {
            if (callingUid != Process.SYSTEM_UID || (intent.getFlags()
                    & Intent.FLAG_RECEIVER_BOOT_UPGRADE) == 0) {
                Slog.w(TAG, "Skipping broadcast of " + intent