From 308fa0548b8be4d8cca7ba55846d6f61b36f1a7d Mon Sep 17 00:00:00 2001 From: Sergii Skorokhodov Date: Tue, 11 Nov 2014 08:22:18 +0100 Subject: [PATCH] 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. Bug: 7462778 Change-Id: I1b51bcdb62bdd0f6dbe05dab4d529d4ad40d0d44 --- .../com/android/server/am/ActivityManagerService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 7e17043b233b1..c32c794954d59 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -9246,9 +9246,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 " @@ -15604,10 +15604,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