diff options
-rw-r--r-- | services/core/java/com/android/server/am/UserController.java | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 6b44f14883e5..d25f2cb76d74 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -99,6 +99,7 @@ import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; /** * Helper class for {@link ActivityManagerService} responsible for multi-user functionality. @@ -1057,6 +1058,7 @@ final class UserController { uss.switching = true; mCurWaitingUserSwitchCallbacks = curWaitingUserSwitchCallbacks; } + final AtomicInteger waitingCallbacksCount = new AtomicInteger(observerCount); for (int i = 0; i < observerCount; i++) { try { // Prepend with unique prefix to guarantee that keys are unique @@ -1075,7 +1077,7 @@ final class UserController { } curWaitingUserSwitchCallbacks.remove(name); // Continue switching if all callbacks have been notified - if (curWaitingUserSwitchCallbacks.isEmpty()) { + if (waitingCallbacksCount.decrementAndGet() == 0) { sendContinueUserSwitchLocked(uss, oldUserId, newUserId); } } |