diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/UserManagerService.java | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 57d7d79b2392..2b639fa43c69 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -379,6 +379,10 @@ public class UserManagerService extends IUserManager.Stub { /** Count down latch to wait while boot user is not set.*/ private final CountDownLatch mBootUserLatch = new CountDownLatch(1); + + /** Current boot phase. */ + private @SystemService.BootPhase int mCurrentBootPhase; + /** * Internal non-parcelable wrapper for UserInfo that is not exposed to other system apps. */ @@ -968,6 +972,7 @@ public class UserManagerService extends IUserManager.Stub { @Override public void onBootPhase(int phase) { + mUms.mCurrentBootPhase = phase; if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) { mUms.cleanupPartialUsers(); @@ -6204,6 +6209,11 @@ public class UserManagerService extends IUserManager.Stub { Slog.w(LOG_TAG, "Cannot remove user. " + restriction + " is enabled."); return false; } + if (mCurrentBootPhase < SystemService.PHASE_ACTIVITY_MANAGER_READY) { + Slog.w(LOG_TAG, "Cannot remove user, removeUser is called too early during boot. " + + "ActivityManager is not ready yet."); + return false; + } return removeUserWithProfilesUnchecked(userId); } |