diff options
author | 2018-07-20 13:01:08 -0700 | |
---|---|---|
committer | 2018-07-23 15:22:55 +0000 | |
commit | 2e8c7670b12ce7075bcc34c1502d268a71f99a0d (patch) | |
tree | 2e110fd8937d27c332d2076001d6a9ac59c037db | |
parent | d6d420676b9aa16952bbf0e835cedab9b94e3520 (diff) |
Frameworks: Annotate trivial @GuardedBy in services/core
Add @GuardedBy for simple functions that require locks and have a name in
one of the frameworks naming styles for locks ("^.*(Locked|LPw|LPr|L[a-zA-Z]|UL|AL|NL)$").
Changelist for package manager.
Derived by errorprone.
Bug: 73000847
Test: m
Change-Id: I1f1f024199db85d4023323169441c8514ea3cc3a
4 files changed, 86 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/InstantAppRegistry.java b/services/core/java/com/android/server/pm/InstantAppRegistry.java index fde13acb8f38..38b9024ac048 100644 --- a/services/core/java/com/android/server/pm/InstantAppRegistry.java +++ b/services/core/java/com/android/server/pm/InstantAppRegistry.java @@ -134,6 +134,7 @@ class InstantAppRegistry { mCookiePersistence = new CookiePersistence(BackgroundThread.getHandler().getLooper()); } + @GuardedBy("mService.mPackages") public byte[] getInstantAppCookieLPw(@NonNull String packageName, @UserIdInt int userId) { // Only installed packages can get their own cookie @@ -157,6 +158,7 @@ class InstantAppRegistry { return null; } + @GuardedBy("mService.mPackages") public boolean setInstantAppCookieLPw(@NonNull String packageName, @Nullable byte[] cookie, @UserIdInt int userId) { if (cookie != null && cookie.length > 0) { @@ -249,6 +251,7 @@ class InstantAppRegistry { } + @GuardedBy("mService.mPackages") public @Nullable List<InstantAppInfo> getInstantAppsLPr(@UserIdInt int userId) { List<InstantAppInfo> installedApps = getInstalledInstantApplicationsLPr(userId); List<InstantAppInfo> uninstalledApps = getUninstalledInstantApplicationsLPr(userId); @@ -261,6 +264,7 @@ class InstantAppRegistry { return uninstalledApps; } + @GuardedBy("mService.mPackages") public void onPackageInstalledLPw(@NonNull PackageParser.Package pkg, @NonNull int[] userIds) { PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null) { @@ -331,6 +335,7 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") public void onPackageUninstalledLPw(@NonNull PackageParser.Package pkg, @NonNull int[] userIds) { PackageSetting ps = (PackageSetting) pkg.mExtras; @@ -356,6 +361,7 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") public void onUserRemovedLPw(int userId) { if (mUninstalledInstantApps != null) { mUninstalledInstantApps.remove(userId); @@ -394,6 +400,7 @@ class InstantAppRegistry { return instantGrantList.get(instantAppId); } + @GuardedBy("mService.mPackages") public void grantInstantAccessLPw(@UserIdInt int userId, @Nullable Intent intent, int targetAppId, int instantAppId) { if (mInstalledInstantAppUids == null) { @@ -428,6 +435,7 @@ class InstantAppRegistry { instantGrantList.put(instantAppId, true /*granted*/); } + @GuardedBy("mService.mPackages") public void addInstantAppLPw(@UserIdInt int userId, int instantAppId) { if (mInstalledInstantAppUids == null) { mInstalledInstantAppUids = new SparseArray<>(); @@ -440,6 +448,7 @@ class InstantAppRegistry { instantAppList.put(instantAppId, true /*installed*/); } + @GuardedBy("mService.mPackages") private void removeInstantAppLPw(@UserIdInt int userId, int instantAppId) { // remove from the installed list if (mInstalledInstantAppUids == null) { @@ -465,6 +474,7 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") private void removeAppLPw(@UserIdInt int userId, int targetAppId) { // remove from the installed list if (mInstantGrants == null) { @@ -477,6 +487,7 @@ class InstantAppRegistry { targetAppList.delete(targetAppId); } + @GuardedBy("mService.mPackages") private void addUninstalledInstantAppLPw(@NonNull PackageParser.Package pkg, @UserIdInt int userId) { InstantAppInfo uninstalledApp = createInstantAppInfoForPackage( @@ -531,11 +542,13 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") boolean hasInstantApplicationMetadataLPr(String packageName, int userId) { return hasUninstalledInstantAppStateLPr(packageName, userId) || hasInstantAppMetadataLPr(packageName, userId); } + @GuardedBy("mService.mPackages") public void deleteInstantApplicationMetadataLPw(@NonNull String packageName, @UserIdInt int userId) { removeUninstalledInstantAppStateLPw((UninstalledInstantAppState state) -> @@ -552,6 +565,7 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") private void removeUninstalledInstantAppStateLPw( @NonNull Predicate<UninstalledInstantAppState> criteria, @UserIdInt int userId) { if (mUninstalledInstantApps == null) { @@ -579,6 +593,7 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") private boolean hasUninstalledInstantAppStateLPr(String packageName, @UserIdInt int userId) { if (mUninstalledInstantApps == null) { return false; @@ -797,6 +812,7 @@ class InstantAppRegistry { return false; } + @GuardedBy("mService.mPackages") private @Nullable List<InstantAppInfo> getInstalledInstantApplicationsLPr( @UserIdInt int userId) { List<InstantAppInfo> result = null; @@ -851,6 +867,7 @@ class InstantAppRegistry { } } + @GuardedBy("mService.mPackages") private @Nullable List<InstantAppInfo> getUninstalledInstantApplicationsLPr( @UserIdInt int userId) { List<UninstalledInstantAppState> uninstalledAppStates = @@ -923,6 +940,7 @@ class InstantAppRegistry { return uninstalledAppState.mInstantAppInfo; } + @GuardedBy("mService.mPackages") private @Nullable List<UninstalledInstantAppState> getUninstalledInstantAppStatesLPr( @UserIdInt int userId) { List<UninstalledInstantAppState> uninstalledAppStates = null; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 965f7bd5eba7..3919f500fb5a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3440,6 +3440,7 @@ public class PackageManagerService extends IPackageManager.Stub return dstCodePath; } + @GuardedBy("mPackages") private void updateInstantAppInstallerLocked(String modifiedPackage) { // we're only interested in updating the installer appliction when 1) it's not // already set or 2) the modified package is the installer @@ -3694,6 +3695,7 @@ public class PackageManagerService extends IPackageManager.Stub return null; } + @GuardedBy("mPackages") private @Nullable ActivityInfo getInstantAppInstallerLPr() { String[] orderedActions = Build.IS_ENG ? new String[]{ @@ -3760,6 +3762,7 @@ public class PackageManagerService extends IPackageManager.Stub return matches.get(0).getComponentInfo().getComponentName(); } + @GuardedBy("mPackages") private void primeDomainVerificationsLPw(int userId) { if (DEBUG_DOMAIN_VERIFICATION) { Slog.d(TAG, "Priming domain verifications in user " + userId); @@ -3813,6 +3816,7 @@ public class PackageManagerService extends IPackageManager.Stub scheduleWriteSettingsLocked(); } + @GuardedBy("mPackages") private void applyFactoryDefaultBrowserLPw(int userId) { // The default browser app's package name is stored in a string resource, // with a product-specific overlay used for vendor customization. @@ -3836,6 +3840,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void calculateDefaultBrowserLPw(int userId) { List<String> allBrowsers = resolveAllBrowserApps(userId); final String browserPkg = (allBrowsers.size() == 1) ? allBrowsers.get(0) : null; @@ -4196,6 +4201,7 @@ public class PackageManagerService extends IPackageManager.Stub * * @see #canViewInstantApps(int, int) */ + @GuardedBy("mPackages") private boolean filterAppAccessLPr(@Nullable PackageSetting ps, int callingUid, @Nullable ComponentName component, @ComponentType int componentType, int userId) { // if we're in an isolated process, get the real calling UID @@ -4253,10 +4259,12 @@ public class PackageManagerService extends IPackageManager.Stub /** * @see #filterAppAccessLPr(PackageSetting, int, ComponentName, int, int) */ + @GuardedBy("mPackages") private boolean filterAppAccessLPr(@Nullable PackageSetting ps, int callingUid, int userId) { return filterAppAccessLPr(ps, callingUid, null, TYPE_UNKNOWN, userId); } + @GuardedBy("mPackages") private boolean filterSharedLibPackageLPr(@Nullable PackageSetting ps, int uid, int userId, int flags) { // Callers can access only the libs they depend on, otherwise they need to explicitly @@ -4455,6 +4463,7 @@ public class PackageManagerService extends IPackageManager.Stub ? ParceledListSlice.emptyList() : new ParceledListSlice<>(permissionList); } + @GuardedBy("mPackages") private ApplicationInfo generateApplicationInfoFromSettingsLPw(String packageName, int flags, int filterCallingUid, int userId) { if (!sUserManager.exists(userId)) return null; @@ -4540,6 +4549,7 @@ public class PackageManagerService extends IPackageManager.Stub return null; } + @GuardedBy("mPackages") private String normalizePackageNameLPr(String packageName) { String normalizedPackageName = mSettings.getRenamedPackageLPr(packageName); return normalizedPackageName != null ? normalizedPackageName : packageName; @@ -5078,6 +5088,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private List<VersionedPackage> getPackagesUsingSharedLibraryLPr( SharedLibraryInfo libInfo, int flags, int userId) { List<VersionedPackage> versionedPackages = null; @@ -5233,6 +5244,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void updateSequenceNumberLP(PackageSetting pkgSetting, int[] userList) { for (int i = userList.length - 1; i >= 0; --i) { final int userId = userList[i]; @@ -6266,6 +6278,7 @@ public class PackageManagerService extends IPackageManager.Stub return true; } + @GuardedBy("mPackages") private ResolveInfo findPersistentPreferredActivityLP(Intent intent, String resolvedType, int flags, List<ResolveInfo> query, boolean debug, int userId) { final int N = query.size(); @@ -8594,6 +8607,7 @@ public class PackageManagerService extends IPackageManager.Stub * Traces a package scan. * @see #scanPackageLI(File, int, int, long, UserHandle) */ + @GuardedBy("mInstallLock") private PackageParser.Package scanPackageTracedLI(File scanFile, final int parseFlags, int scanFlags, long currentTime, UserHandle user) throws PackageManagerException { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanPackage [" + scanFile.toString() + "]"); @@ -8608,6 +8622,7 @@ public class PackageManagerService extends IPackageManager.Stub * Scans a package and returns the newly parsed package. * Returns {@code null} in case of errors and the error code is stored in mLastScanError */ + @GuardedBy({"mInstallLock", "mPackages"}) private PackageParser.Package scanPackageLI(File scanFile, int parseFlags, int scanFlags, long currentTime, UserHandle user) throws PackageManagerException { if (DEBUG_INSTALL) Slog.d(TAG, "Parsing: " + scanFile); @@ -8639,6 +8654,7 @@ public class PackageManagerService extends IPackageManager.Stub * Scans a package and returns the newly parsed package. * @throws PackageManagerException on a parse error. */ + @GuardedBy({"mInstallLock", "mPackages"}) private PackageParser.Package scanPackageChildLI(PackageParser.Package pkg, final @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime, @Nullable UserHandle user) @@ -8731,6 +8747,7 @@ public class PackageManagerService extends IPackageManager.Stub * structures and the package is made available to the rest of the system. * <p>NOTE: The return value should be removed. It's the passed in package object. */ + @GuardedBy({"mInstallLock", "mPackages"}) private PackageParser.Package addForInitLI(PackageParser.Package pkg, @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime, @Nullable UserHandle user) @@ -9616,6 +9633,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private boolean verifyPackageUpdateLPr(PackageSetting oldPkg, PackageParser.Package newPkg) { if ((oldPkg.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0) { Slog.w(TAG, "Unable to update from " + oldPkg.name @@ -9631,6 +9649,7 @@ public class PackageManagerService extends IPackageManager.Stub return true; } + @GuardedBy("mInstallLock") void removeCodePathLI(File codePath) { if (codePath.isDirectory()) { try { @@ -9758,6 +9777,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void addSharedLibraryLPr(Set<String> usesLibraryFiles, SharedLibraryEntry file, PackageParser.Package changingLib) { @@ -9783,6 +9803,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void updateSharedLibrariesLPr(PackageParser.Package pkg, PackageParser.Package changingLib) throws PackageManagerException { if (pkg == null) { @@ -9815,6 +9836,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private Set<String> addSharedLibrariesLPw(@NonNull List<String> requestedLibraries, @Nullable long[] requiredVersions, @Nullable String[][] requiredCertDigests, @NonNull String packageName, @Nullable PackageParser.Package changingLib, @@ -9926,6 +9948,7 @@ public class PackageManagerService extends IPackageManager.Stub return false; } + @GuardedBy("mPackages") private ArrayList<PackageParser.Package> updateAllSharedLibrariesLPw( PackageParser.Package changingPkg) { ArrayList<PackageParser.Package> res = null; @@ -9961,6 +9984,7 @@ public class PackageManagerService extends IPackageManager.Stub return res; } + @GuardedBy({"mInstallLock", "mPackages"}) private PackageParser.Package scanPackageTracedLI(PackageParser.Package pkg, final @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime, @Nullable UserHandle user) throws PackageManagerException { @@ -10156,7 +10180,7 @@ public class PackageManagerService extends IPackageManager.Stub // the results / removing app data needs to be moved up a level to the callers of this // method. Also, we need to solve the problem of potentially creating a new shared user // setting. That can probably be done later and patch things up after the fact. - @GuardedBy("mInstallLock") + @GuardedBy({"mInstallLock", "mPackages"}) private PackageParser.Package scanPackageNewLI(@NonNull PackageParser.Package pkg, final @ParseFlags int parseFlags, @ScanFlags int scanFlags, long currentTime, @Nullable UserHandle user) throws PackageManagerException { @@ -10224,7 +10248,7 @@ public class PackageManagerService extends IPackageManager.Stub * This needs to be fixed so, once we get to this point, no errors are * possible and the system is not left in an inconsistent state. */ - @GuardedBy("mPackages") + @GuardedBy({"mPackages", "mInstallLock"}) private void commitScanResultsLocked(@NonNull ScanRequest request, @NonNull ScanResult result) throws PackageManagerException { final PackageParser.Package pkg = request.pkg; @@ -16904,6 +16928,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void enableSystemPackageLPw(PackageParser.Package pkg) { // Enable the parent package mSettings.enableSystemPackageLPw(pkg.packageName); @@ -16915,6 +16940,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private boolean disableSystemPackageLPw(PackageParser.Package oldPkg, PackageParser.Package newPkg) { // Disable the parent package (parent always replaced) @@ -16929,6 +16955,7 @@ public class PackageManagerService extends IPackageManager.Stub return disabled; } + @GuardedBy("mPackages") private void setInstallerPackageNameLPw(PackageParser.Package pkg, String installerPackageName) { // Enable the parent package @@ -17057,6 +17084,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy({"mInstallLock", "mPackages"}) private void installPackageTracedLI(InstallArgs args, PackageInstalledInfo res) { try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackage"); @@ -17103,7 +17131,7 @@ public class PackageManagerService extends IPackageManager.Stub return true; } - @GuardedBy("mInstallLock") + @GuardedBy({"mInstallLock", "mPackages", "PackageManagerService.mPackages"}) private void installPackagesLI(List<InstallRequest> requests) { Map<String, ScanResult> scans = new ArrayMap<>(requests.size()); for (InstallRequest request : requests) { @@ -17829,6 +17857,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private boolean needsNetworkVerificationLPr(ActivityIntentInfo filter) { final ComponentName cn = filter.activity.getComponentName(); final String packageName = cn.getPackageName(); @@ -18063,6 +18092,7 @@ public class PackageManagerService extends IPackageManager.Stub return pkg.packageName; } + @GuardedBy("mPackages") private String resolveInternalPackageNameLPr(String packageName, long versionCode) { // Handle renamed packages String normalizedPackageName = mSettings.getRenamedPackageLPr(packageName); @@ -19129,6 +19159,7 @@ public class PackageManagerService extends IPackageManager.Stub return ret; } + @GuardedBy("mPackages") private void markPackageUninstalledForUserLPw(PackageSetting ps, UserHandle user) { final int[] userIds = (user == null || user.getIdentifier() == UserHandle.USER_ALL) ? sUserManager.getUserIds() : new int[] {user.getIdentifier()}; @@ -19403,6 +19434,7 @@ public class PackageManagerService extends IPackageManager.Stub * * @param userId The device user for which to do a reset. */ + @GuardedBy("mPackages") private void resetUserChangesToRuntimePermissionsAndFlagsLPw(int userId) { final int packageCount = mPackages.size(); for (int i = 0; i < packageCount; i++) { @@ -19422,6 +19454,7 @@ public class PackageManagerService extends IPackageManager.Stub * @param ps The package for which to reset. * @param userId The device user for which to do a reset. */ + @GuardedBy("mPackages") private void resetUserChangesToRuntimePermissionsAndFlagsLPw( final PackageSetting ps, final int userId) { if (ps.pkg == null) { @@ -19630,6 +19663,7 @@ public class PackageManagerService extends IPackageManager.Stub "Shame on you for calling the hidden API getPackageSizeInfo(). Shame!"); } + @GuardedBy("mInstallLock") private boolean getPackageSizeInfoLI(String packageName, int userId, PackageStats stats) { final PackageSetting ps; synchronized (mPackages) { @@ -19664,6 +19698,7 @@ public class PackageManagerService extends IPackageManager.Stub return true; } + @GuardedBy("mPackages") private int getUidTargetSdkVersionLockedLPr(int uid) { Object obj = mSettings.getUserIdLPr(uid); if (obj instanceof SharedUserSetting) { @@ -19687,6 +19722,7 @@ public class PackageManagerService extends IPackageManager.Stub return Build.VERSION_CODES.CUR_DEVELOPMENT; } + @GuardedBy("mPackages") private int getPackageTargetSdkVersionLockedLPr(String packageName) { final PackageParser.Package p = mPackages.get(packageName); if (p != null) { @@ -19882,6 +19918,7 @@ public class PackageManagerService extends IPackageManager.Stub } /** This method takes a specific user id as well as UserHandle.USER_ALL. */ + @GuardedBy("mPackages") boolean clearPackagePreferredActivitiesLPw(String packageName, int userId) { ArrayList<PreferredActivity> removed = null; boolean changed = false; @@ -19920,6 +19957,7 @@ public class PackageManagerService extends IPackageManager.Stub } /** This method takes a specific user id as well as UserHandle.USER_ALL. */ + @GuardedBy("mPackages") private void clearIntentFilterVerificationsLPw(int userId) { final int packageCount = mPackages.size(); for (int i = 0; i < packageCount; i++) { @@ -19929,6 +19967,7 @@ public class PackageManagerService extends IPackageManager.Stub } /** This method takes a specific user id as well as UserHandle.USER_ALL. */ + @GuardedBy("mPackages") void clearIntentFilterVerificationsLPw(String packageName, int userId) { if (userId == UserHandle.USER_ALL) { if (mSettings.removeIntentFilterVerificationLPw(packageName, @@ -20339,6 +20378,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void serializeRuntimePermissionGrantsLPr(XmlSerializer serializer, final int userId) throws IOException { serializer.startTag(null, TAG_ALL_GRANTS); @@ -20398,6 +20438,7 @@ public class PackageManagerService extends IPackageManager.Stub serializer.endTag(null, TAG_ALL_GRANTS); } + @GuardedBy("mPackages") private void processRestoredPermissionGrantsLPr(XmlPullParser parser, int userId) throws XmlPullParserException, IOException { String pkgName = null; @@ -22067,6 +22108,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void dumpDexoptStateLPr(PrintWriter pw, String packageName) { final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); ipw.println(); @@ -22094,6 +22136,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void dumpCompilerStatsLPr(PrintWriter pw, String packageName) { final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); ipw.println(); @@ -22471,6 +22514,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mInstallLock") private void reconcileAppsDataLI(String volumeUuid, int userId, int flags, boolean migrateAppData) { reconcileAppsDataLI(volumeUuid, userId, flags, migrateAppData, false /* onlyCoreApps */); @@ -22486,6 +22530,7 @@ public class PackageManagerService extends IPackageManager.Stub * correct for all installed apps. * @return list of skipped non-core packages (if {@code onlyCoreApps} is true) */ + @GuardedBy("mInstallLock") private List<String> reconcileAppsDataLI(String volumeUuid, int userId, int flags, boolean migrateAppData, boolean onlyCoreApps) { Slog.v(TAG, "reconcileAppsData for " + volumeUuid + " u" + userId + " 0x" @@ -23233,6 +23278,7 @@ public class PackageManagerService extends IPackageManager.Stub * that are no longer in use by any other user. * @param userHandle the user being removed */ + @GuardedBy("mPackages") private void removeUnusedPackagesLPw(UserManagerService userManager, final int userHandle) { final boolean DEBUG_CLEAN_APKS = false; int [] users = userManager.getUserIds(); @@ -23511,6 +23557,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void deletePackageIfUnusedLPr(final String packageName) { PackageSetting ps = mSettings.mPackages.get(packageName); if (ps == null) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index d17697bb86d6..e9cd7075d8e0 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -5172,10 +5172,12 @@ public final class Settings { mPersistenceLock = persistenceLock; } + @GuardedBy("Settings.this.mLock") public boolean areDefaultRuntimPermissionsGrantedLPr(int userId) { return mDefaultPermissionsGranted.get(userId); } + @GuardedBy("Settings.this.mLock") public void onDefaultRuntimePermissionsGrantedLPr(int userId) { mFingerprints.put(userId, Build.FINGERPRINT); writePermissionsForUserAsyncLPr(userId); @@ -5186,6 +5188,7 @@ public final class Settings { writePermissionsSync(userId); } + @GuardedBy("Settings.this.mLock") public void writePermissionsForUserAsyncLPr(int userId) { final long currentTimeMillis = SystemClock.uptimeMillis(); @@ -5354,6 +5357,7 @@ public final class Settings { } } + @GuardedBy("Settings.this.mLock") private void onUserRemovedLPw(int userId) { // Make sure we do not mHandler.removeMessages(userId); @@ -5387,6 +5391,7 @@ public final class Settings { getUserRuntimePermissionsFile(userId).delete(); } + @GuardedBy("Settings.this.mLock") public void readStateForUserSyncLPr(int userId) { File permissionsFile = getUserRuntimePermissionsFile(userId); if (!permissionsFile.exists()) { @@ -5439,6 +5444,7 @@ public final class Settings { // Private internals + @GuardedBy("Settings.this.mLock") private void parseRuntimePermissionsLPr(XmlPullParser parser, int userId) throws IOException, XmlPullParserException { final int outerDepth = parser.getDepth(); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index 46935f085911..c18ca25d8c1f 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -684,6 +684,7 @@ public class UserManagerService extends IUserManager.Stub { } /** Assume permissions already checked and caller's identity cleared */ + @GuardedBy("mUsersLock") private List<UserInfo> getProfilesLU(int userId, boolean enabledOnly, boolean fullInfo) { IntArray profileIds = getProfileIdsLU(userId, enabledOnly); ArrayList<UserInfo> users = new ArrayList<>(profileIds.size()); @@ -706,6 +707,7 @@ public class UserManagerService extends IUserManager.Stub { /** * Assume permissions already checked and caller's identity cleared */ + @GuardedBy("mUsersLock") private IntArray getProfileIdsLU(int userId, boolean enabledOnly) { UserInfo user = getUserInfoLU(userId); IntArray result = new IntArray(mUsers.size()); @@ -784,6 +786,7 @@ public class UserManagerService extends IUserManager.Stub { return mLocalService.getProfileParentId(userHandle); } + @GuardedBy("mUsersLock") private UserInfo getProfileParentLU(int userHandle) { UserInfo profile = getUserInfoLU(userHandle); if (profile == null) { @@ -1206,6 +1209,7 @@ public class UserManagerService extends IUserManager.Stub { /* * Should be locked on mUsers before calling this. */ + @GuardedBy("mUsersLock") private UserInfo getUserInfoLU(int userId) { final UserData userData = mUsers.get(userId); // If it is partial and not in the process of being removed, return as unknown user. @@ -1216,6 +1220,7 @@ public class UserManagerService extends IUserManager.Stub { return userData != null ? userData.info : null; } + @GuardedBy("mUsersLock") private UserData getUserDataLU(int userId) { final UserData userData = mUsers.get(userId); // If it is partial and not in the process of being removed, return as unknown user. @@ -1718,6 +1723,7 @@ public class UserManagerService extends IUserManager.Stub { } // Package private for the inner class. + @GuardedBy("mRestrictionsLock") void applyUserRestrictionsLR(int userId) { updateUserRestrictionsInternalLR(null, userId); } @@ -1798,6 +1804,7 @@ public class UserManagerService extends IUserManager.Stub { } } + @GuardedBy("mUsersLock") private int getAliveUsersExcludingGuestsCountLU() { int aliveUserCount = 0; final int totalUserCount = mUsers.size(); @@ -1971,6 +1978,7 @@ public class UserManagerService extends IUserManager.Stub { } } + @GuardedBy({"mRestrictionsLock", "mPackagesLock"}) private void readUserListLP() { if (!mUserListFile.exists()) { fallbackToSingleUserLP(); @@ -2068,6 +2076,7 @@ public class UserManagerService extends IUserManager.Stub { * Upgrade steps between versions, either for fixing bugs or changing the data format. * @param oldGlobalUserRestrictions Pre-O global device policy restrictions. */ + @GuardedBy({"mRestrictionsLock", "mPackagesLock"}) private void upgradeIfNecessaryLP(Bundle oldGlobalUserRestrictions) { final int originalVersion = mUserVersion; int userVersion = mUserVersion; @@ -2148,6 +2157,7 @@ public class UserManagerService extends IUserManager.Stub { } } + @GuardedBy({"mPackagesLock", "mRestrictionsLock"}) private void fallbackToSingleUserLP() { int flags = UserInfo.FLAG_INITIALIZED; // In split system user mode, the admin and primary flags are assigned to the first human @@ -2317,6 +2327,7 @@ public class UserManagerService extends IUserManager.Stub { * <user id="2"></user> * </users> */ + @GuardedBy({"mRestrictionsLock", "mPackagesLock"}) private void writeUserListLP() { if (DBG) { debug("writeUserList"); @@ -4060,6 +4071,7 @@ public class UserManagerService extends IUserManager.Stub { } } + @GuardedBy("mUsersLock") @VisibleForTesting int getFreeProfileBadgeLU(int parentUserId) { int maxManagedProfiles = getMaxManagedProfiles(); |