Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7892486 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

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
parent 77566dd1
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);
                }