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

Commit e80085d6 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Reduce excessive locking in UserManager

Bug: 24979571
Change-Id: I1cfbe48712ae26ec134354d109d2538d566b92d7
parent c90d2b6b
Loading
Loading
Loading
Loading
+30 −22
Original line number Diff line number Diff line
@@ -1917,8 +1917,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            mUserAppDataDir = new File(dataDir, "user");
            mDrmAppPrivateInstallDir = new File(dataDir, "app-private");
            sUserManager = new UserManagerService(context, this,
                    mInstallLock, mPackages);
            sUserManager = new UserManagerService(context, this, mPackages);
            // Propagate permission configuration in to package manager.
            ArrayMap<String, SystemConfig.PermissionEntry> permConfig
@@ -16314,14 +16313,15 @@ public class PackageManagerService extends IPackageManager.Stub {
    }
    /** Called by UserManagerService */
    void cleanUpUserLILPw(UserManagerService userManager, int userHandle) {
    void cleanUpUser(UserManagerService userManager, int userHandle) {
        synchronized (mPackages) {
            mDirtyUsers.remove(userHandle);
            mUserNeedsBadging.delete(userHandle);
            mSettings.removeUserLPw(userHandle);
            mPendingBroadcasts.remove(userHandle);
        }
        synchronized (mInstallLock) {
            if (mInstaller != null) {
            // Technically, we shouldn't be doing this with the package lock
            // held.  However, this is very rare, and there is already so much
            // other disk I/O going on, that we'll let it slide for now.
                final StorageManager storage = mContext.getSystemService(StorageManager.class);
                for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
                    final String volumeUuid = vol.getFsUuid();
@@ -16329,9 +16329,11 @@ public class PackageManagerService extends IPackageManager.Stub {
                    mInstaller.removeUserDataDirs(volumeUuid, userHandle);
                }
            }
        mUserNeedsBadging.delete(userHandle);
            synchronized (mPackages) {
                removeUnusedPackagesLILPw(userManager, userHandle);
            }
        }
    }
    /**
     * We're removing userHandle and would like to remove any downloaded packages
@@ -16380,14 +16382,20 @@ public class PackageManagerService extends IPackageManager.Stub {
    }
    /** Called by UserManagerService */
    void createNewUserLILPw(int userHandle) {
    void createNewUser(int userHandle) {
        if (mInstaller != null) {
            synchronized (mInstallLock) {
                synchronized (mPackages) {
                    mInstaller.createUserConfig(userHandle);
                    mSettings.createNewUserLILPw(this, mInstaller, userHandle);
                }
            }
            synchronized (mPackages) {
                applyFactoryDefaultBrowserLPw(userHandle);
                primeDomainVerificationsLPw(userHandle);
            }
        }
    }
    void newUserCreated(final int userHandle) {
        mDefaultPermissionPolicy.grantDefaultPermissions(userHandle);
+194 −219

File changed.

Preview size limit exceeded, changes collapsed.