From bc77f8889e2158cefeddebaccb26e0196851004f Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Wed, 25 Oct 2017 14:23:43 -0700 Subject: [PATCH] Fixed issue with MAX_RUNNING_USERS Previously the user being switched could remain running if primary user had work profile, due to counter being decremented twice. Test: manual switch with work profiles and without + cts Bug: 67091825 Change-Id: I61212c6407fecefa0094c6265dee6f3184d95701 --- .../core/java/com/android/server/am/UserController.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 4aa8adb9dc78..a0c5cfaa7908 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -250,21 +250,21 @@ class UserController implements Handler.Callback { } void stopRunningUsersLU(int maxRunningUsers) { - int num = mUserLru.size(); + int currentlyRunning = mUserLru.size(); int i = 0; - while (num > maxRunningUsers && i < mUserLru.size()) { + while (currentlyRunning > maxRunningUsers && i < mUserLru.size()) { Integer oldUserId = mUserLru.get(i); UserState oldUss = mStartedUsers.get(oldUserId); if (oldUss == null) { // Shouldn't happen, but be sane if it does. mUserLru.remove(i); - num--; + currentlyRunning--; continue; } if (oldUss.state == UserState.STATE_STOPPING || oldUss.state == UserState.STATE_SHUTDOWN) { // This user is already stopping, doesn't count. - num--; + currentlyRunning--; i++; continue; } @@ -272,16 +272,15 @@ class UserController implements Handler.Callback { // Owner/System user and current user can't be stopped. We count it as running // when it is not a pure system user. if (UserInfo.isSystemOnly(oldUserId)) { - num--; + currentlyRunning--; } i++; continue; } // This is a user to be stopped. - if (stopUsersLU(oldUserId, false, null) != USER_OP_SUCCESS) { - num--; + if (stopUsersLU(oldUserId, false, null) == USER_OP_SUCCESS) { + currentlyRunning--; } - num--; i++; } } -- 2.11.0