From a7892486c2100d99abef355f2bd2c919e6516a6d Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Fri, 7 Aug 2015 11:09:05 -0700 Subject: [PATCH] Fix partial user cleanup on restart Internal volume was not available during PackageManagerService creation, which resulted in a zombie user's folder not being cleaned after a reboot. Add the internal volume earlier in the boot cycle so that it can be accessed for user cleanup. Bug: 22483086 Change-Id: I8f3ffbb25f3902d00a96d1ee2d7a79373c5e35b7 --- .../java/com/android/server/MountService.java | 18 ++++++++++++------ .../android/server/pm/UserManagerService.java | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java index 53e8d147ad3ce..d10a457747a30 100644 --- a/services/core/java/com/android/server/MountService.java +++ b/services/core/java/com/android/server/MountService.java @@ -766,6 +766,15 @@ class MountService extends IMountService.Stub } } + private void addInternalVolume() { + // Create a stub volume that represents internal storage + final VolumeInfo internal = new VolumeInfo(VolumeInfo.ID_PRIVATE_INTERNAL, + VolumeInfo.TYPE_PRIVATE, null, null); + internal.state = VolumeInfo.STATE_MOUNTED; + internal.path = Environment.getDataDirectory().getAbsolutePath(); + mVolumes.put(internal.id, internal); + } + private void resetIfReadyAndConnectedLocked() { Slog.d(TAG, "Thinking about reset, mSystemReady=" + mSystemReady + ", mDaemonConnected=" + mDaemonConnected); @@ -775,12 +784,7 @@ class MountService extends IMountService.Stub mDisks.clear(); mVolumes.clear(); - // Create a stub volume that represents internal storage - final VolumeInfo internal = new VolumeInfo(VolumeInfo.ID_PRIVATE_INTERNAL, - VolumeInfo.TYPE_PRIVATE, null, null); - internal.state = VolumeInfo.STATE_MOUNTED; - internal.path = Environment.getDataDirectory().getAbsolutePath(); - mVolumes.put(internal.id, internal); + addInternalVolume(); try { mConnector.execute("volume", "reset"); @@ -1412,6 +1416,8 @@ class MountService extends IMountService.Stub userFilter.addAction(Intent.ACTION_USER_REMOVED); mContext.registerReceiver(mUserReceiver, userFilter, null, mHandler); + addInternalVolume(); + // Add ourself to the Watchdog monitors if enabled. if (WATCHDOG_ENABLE) { Watchdog.getInstance().addMonitor(this); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index ebcbecdd7fe59..264170cf1f215 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -246,7 +246,7 @@ public class UserManagerService extends IUserManager.Stub { } for (int i = 0; i < partials.size(); i++) { UserInfo ui = partials.get(i); - Slog.w(LOG_TAG, "Removing partially created user #" + i + Slog.w(LOG_TAG, "Removing partially created user " + ui.id + " (name=" + ui.name + ")"); removeUserStateLocked(ui.id); }