From 3f24e69dbed74fd7724c0a4714ce612f1cb5bc5c Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 5 Feb 2018 13:24:28 -0800 Subject: [PATCH 1/2] Frameworks: Annotate trivial @GuardedBy in core/java Add @GuardedBy for simple functions that require a single lock and are named XYZLocked. Bug: 73000847 Test: m Test: m javac-check-framework RUN_ERROR_PRONE=true Change-Id: Icb5114fea2ff2385e1cc7511121026099e05c0ee --- core/java/android/app/ContextImpl.java | 1 + .../RuntimePermissionPresenter.java | 1 + .../android/content/res/AssetManager.java | 5 +++++ .../database/sqlite/SQLiteConnectionPool.java | 12 +++++++++++ .../NotificationListenerService.java | 1 + .../view/autofill/AutofillManager.java | 21 +++++++++++++++++++ .../android/internal/os/BatteryStatsImpl.java | 8 +++++++ .../com/android/internal/os/FuseAppLoop.java | 3 +++ 8 files changed, 52 insertions(+) diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 4a9b2bcb16ed8..a1ba13d9512cf 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -409,6 +409,7 @@ class ContextImpl extends Context { return sp; } + @GuardedBy("ContextImpl.class") private ArrayMap getSharedPreferencesCacheLocked() { if (sSharedPrefsCache == null) { sSharedPrefsCache = new ArrayMap<>(); diff --git a/core/java/android/content/pm/permission/RuntimePermissionPresenter.java b/core/java/android/content/pm/permission/RuntimePermissionPresenter.java index 02d0a6d8bd360..79bc9a30b1e23 100644 --- a/core/java/android/content/pm/permission/RuntimePermissionPresenter.java +++ b/core/java/android/content/pm/permission/RuntimePermissionPresenter.java @@ -274,6 +274,7 @@ public final class RuntimePermissionPresenter { } } + @GuardedBy("mLock") private void scheduleNextMessageIfNeededLocked() { if (mBound && mRemoteInstance != null && !mPendingWork.isEmpty()) { Message nextMessage = mPendingWork.remove(0); diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 24116b42bc7bf..bb907005b6800 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -143,6 +143,7 @@ public final class AssetManager implements AutoCloseable { /** * This must be called from Zygote so that system assets are shared by all applications. */ + @GuardedBy("sSync") private static void createSystemAssetsInZygoteLocked() { if (sSystem != null) { return; @@ -366,6 +367,7 @@ public final class AssetManager implements AutoCloseable { * The AssetManager may have been closed, but references to it still exist * and therefore the native implementation is not destroyed. */ + @GuardedBy("this") private void ensureValidLocked() { if (mObject == 0) { throw new RuntimeException("AssetManager has been destroyed"); @@ -376,6 +378,7 @@ public final class AssetManager implements AutoCloseable { * Ensures that the AssetManager has not been explicitly closed. If this method passes, * then this implies that ensureValidLocked() also passes. */ + @GuardedBy("this") private void ensureOpenLocked() { // If mOpen is true, this implies that mObject != 0. if (!mOpen) { @@ -1189,6 +1192,7 @@ public final class AssetManager implements AutoCloseable { } } + @GuardedBy("this") private void incRefsLocked(long id) { if (DEBUG_REFS) { if (mRefStacks == null) { @@ -1201,6 +1205,7 @@ public final class AssetManager implements AutoCloseable { mNumRefs++; } + @GuardedBy("this") private void decRefsLocked(long id) { if (DEBUG_REFS && mRefStacks != null) { mRefStacks.remove(id); diff --git a/core/java/android/database/sqlite/SQLiteConnectionPool.java b/core/java/android/database/sqlite/SQLiteConnectionPool.java index b211700328b96..dc60612451d47 100644 --- a/core/java/android/database/sqlite/SQLiteConnectionPool.java +++ b/core/java/android/database/sqlite/SQLiteConnectionPool.java @@ -422,6 +422,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private boolean recycleConnectionLocked(SQLiteConnection connection, AcquiredConnectionStatus status) { if (status == AcquiredConnectionStatus.RECONFIGURE) { @@ -531,6 +532,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void closeAvailableConnectionsAndLogExceptionsLocked() { closeAvailableNonPrimaryConnectionsAndLogExceptionsLocked(); @@ -541,6 +543,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private boolean closeAvailableConnectionLocked(int connectionId) { final int count = mAvailableNonPrimaryConnections.size(); for (int i = count - 1; i >= 0; i--) { @@ -562,6 +565,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void closeAvailableNonPrimaryConnectionsAndLogExceptionsLocked() { final int count = mAvailableNonPrimaryConnections.size(); for (int i = 0; i < count; i++) { @@ -581,6 +585,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void closeExcessConnectionsAndLogExceptionsLocked() { int availableCount = mAvailableNonPrimaryConnections.size(); while (availableCount-- > mMaxConnectionPoolSize - 1) { @@ -591,6 +596,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void closeConnectionAndLogExceptionsLocked(SQLiteConnection connection) { try { connection.close(); // might throw @@ -609,6 +615,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void reconfigureAllConnectionsLocked() { if (mAvailablePrimaryConnection != null) { try { @@ -776,6 +783,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void cancelConnectionWaiterLocked(ConnectionWaiter waiter) { if (waiter.mAssignedConnection != null || waiter.mException != null) { // Waiter is done waiting but has not woken up yet. @@ -848,6 +856,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Can't throw. + @GuardedBy("mLock") private void wakeConnectionWaitersLocked() { // Unpark all waiters that have requests that we can fulfill. // This method is designed to not throw runtime exceptions, although we might send @@ -910,6 +919,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Might throw. + @GuardedBy("mLock") private SQLiteConnection tryAcquirePrimaryConnectionLocked(int connectionFlags) { // If the primary connection is available, acquire it now. SQLiteConnection connection = mAvailablePrimaryConnection; @@ -935,6 +945,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Might throw. + @GuardedBy("mLock") private SQLiteConnection tryAcquireNonPrimaryConnectionLocked( String sql, int connectionFlags) { // Try to acquire the next connection in the queue. @@ -974,6 +985,7 @@ public final class SQLiteConnectionPool implements Closeable { } // Might throw. + @GuardedBy("mLock") private void finishAcquireConnectionLocked(SQLiteConnection connection, int connectionFlags) { try { final boolean readOnly = (connectionFlags & CONNECTION_FLAG_READ_ONLY) != 0; diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index b7b2b2de35e54..422e36baee70a 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -1343,6 +1343,7 @@ public abstract class NotificationListenerService extends Service { /** * @hide */ + @GuardedBy("mLock") public final void applyUpdateLocked(NotificationRankingUpdate update) { mRankingMap = new RankingMap(update); } diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 5131a8ad4bf01..8b64bad8fe626 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -619,6 +619,7 @@ public final class AutofillManager { /** * @hide */ + @GuardedBy("mLock") public boolean isCompatibilityModeEnabledLocked() { return mCompatibilityBridge != null; } @@ -709,6 +710,7 @@ public final class AutofillManager { notifyViewEntered(view, 0); } + @GuardedBy("mLock") private boolean shouldIgnoreViewEnteredLocked(@NonNull View view, int flags) { if (isDisabledByServiceLocked()) { if (sVerbose) { @@ -749,6 +751,7 @@ public final class AutofillManager { } /** Returns AutofillCallback if need fire EVENT_INPUT_UNAVAILABLE */ + @GuardedBy("mLock") private AutofillCallback notifyViewEnteredLocked(@NonNull View view, int flags) { if (shouldIgnoreViewEnteredLocked(view, flags)) return null; @@ -792,6 +795,7 @@ public final class AutofillManager { } } + @GuardedBy("mLock") void notifyViewExitedLocked(@NonNull View view) { ensureServiceClientAddedIfNeededLocked(); @@ -893,6 +897,7 @@ public final class AutofillManager { } /** Returns AutofillCallback if need fire EVENT_INPUT_UNAVAILABLE */ + @GuardedBy("mLock") private AutofillCallback notifyViewEnteredLocked(View view, int virtualId, Rect bounds, int flags) { AutofillCallback callback = null; @@ -936,6 +941,7 @@ public final class AutofillManager { } } + @GuardedBy("mLock") private void notifyViewExitedLocked(@NonNull View view, int virtualId) { ensureServiceClientAddedIfNeededLocked(); @@ -1087,6 +1093,7 @@ public final class AutofillManager { } } + @GuardedBy("mLock") private void commitLocked() { if (!mEnabled && !isActiveLocked()) { return; @@ -1115,6 +1122,7 @@ public final class AutofillManager { } } + @GuardedBy("mLock") private void cancelLocked() { if (!mEnabled && !isActiveLocked()) { return; @@ -1378,6 +1386,7 @@ public final class AutofillManager { return new AutofillId(parent.getAutofillViewId(), virtualId); } + @GuardedBy("mLock") private void startSessionLocked(@NonNull AutofillId id, @NonNull Rect bounds, @NonNull AutofillValue value, int flags) { if (sVerbose) { @@ -1408,6 +1417,7 @@ public final class AutofillManager { } } + @GuardedBy("mLock") private void finishSessionLocked() { if (sVerbose) Log.v(TAG, "finishSessionLocked(): " + getStateAsStringLocked()); @@ -1422,6 +1432,7 @@ public final class AutofillManager { resetSessionLocked(); } + @GuardedBy("mLock") private void cancelSessionLocked() { if (sVerbose) Log.v(TAG, "cancelSessionLocked(): " + getStateAsStringLocked()); @@ -1436,6 +1447,7 @@ public final class AutofillManager { resetSessionLocked(); } + @GuardedBy("mLock") private void resetSessionLocked() { mSessionId = NO_SESSION; mState = STATE_UNKNOWN; @@ -1444,6 +1456,7 @@ public final class AutofillManager { mSaveTriggerId = null; } + @GuardedBy("mLock") private void updateSessionLocked(AutofillId id, Rect bounds, AutofillValue value, int action, int flags) { if (sVerbose && action != ACTION_VIEW_EXITED) { @@ -1478,6 +1491,7 @@ public final class AutofillManager { } } + @GuardedBy("mLock") private void ensureServiceClientAddedIfNeededLocked() { if (getClient() == null) { return; @@ -1947,6 +1961,7 @@ public final class AutofillManager { pw.print(" verbose: "); pw.println(sVerbose); } + @GuardedBy("mLock") private String getStateAsStringLocked() { switch (mState) { case STATE_UNKNOWN: @@ -1964,14 +1979,17 @@ public final class AutofillManager { } } + @GuardedBy("mLock") private boolean isActiveLocked() { return mState == STATE_ACTIVE; } + @GuardedBy("mLock") private boolean isDisabledByServiceLocked() { return mState == STATE_DISABLED_BY_SERVICE; } + @GuardedBy("mLock") private boolean isFinishedLocked() { return mState == STATE_FINISHED; } @@ -2167,6 +2185,7 @@ public final class AutofillManager { AutofillValue.forText(node.getText())); } + @GuardedBy("mLock") private void updateTrackedViewsLocked() { if (mTrackedViews != null) { mTrackedViews.onVisibleForAutofillChangedLocked(); @@ -2311,6 +2330,7 @@ public final class AutofillManager { * @param id the id of the view/virtual view whose visibility changed. * @param isVisible visible if the view is visible in the view hierarchy. */ + @GuardedBy("mLock") void notifyViewVisibilityChangedLocked(@NonNull AutofillId id, boolean isVisible) { if (sDebug) { Log.d(TAG, "notifyViewVisibilityChangedLocked(): id=" + id + " isVisible=" @@ -2344,6 +2364,7 @@ public final class AutofillManager { * * @see AutofillClient#autofillClientIsVisibleForAutofill() */ + @GuardedBy("mLock") void onVisibleForAutofillChangedLocked() { // The visibility of the views might have changed while the client was not be visible, // hence update the visibility state for all views. diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index ecab15fb81a5f..cda692d5a6dca 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -3825,6 +3825,7 @@ public class BatteryStatsImpl extends BatteryStats { mActiveHistoryStates2 = 0xffffffff; } + @GuardedBy("this") public void updateTimeBasesLocked(boolean unplugged, int screenState, long uptime, long realtime) { final boolean screenOff = !isScreenOn(screenState); @@ -3902,6 +3903,7 @@ public class BatteryStatsImpl extends BatteryStats { * This should only be called after the cpu times have been read. * @see #scheduleRemoveIsolatedUidLocked(int, int) */ + @GuardedBy("this") public void removeIsolatedUidLocked(int isolatedUid) { StatsLog.write( StatsLog.ISOLATED_UID_CHANGED, mIsolatedUids.get(isolatedUid, -1), @@ -4731,6 +4733,7 @@ public class BatteryStatsImpl extends BatteryStats { return; } + @GuardedBy("this") public void noteScreenStateLocked(int state) { state = mPretendScreenOff ? Display.STATE_OFF : state; @@ -9647,6 +9650,7 @@ public class BatteryStatsImpl extends BatteryStats { return ps; } + @GuardedBy("mBsi") public void updateUidProcessStateLocked(int procState) { int uidRunningState; // Make special note of Foreground Services @@ -11718,6 +11722,7 @@ public class BatteryStatsImpl extends BatteryStats { * and we are on battery with screen off, we give more of the cpu time to those apps holding * wakelocks. If the screen is on, we just assign the actual cpu time an app used. */ + @GuardedBy("this") public void updateCpuTimeLocked() { if (mPowerProfile == null) { return; @@ -12163,6 +12168,7 @@ public class BatteryStatsImpl extends BatteryStats { return false; } + @GuardedBy("this") protected void setOnBatteryLocked(final long mSecRealtime, final long mSecUptime, final boolean onBattery, final int oldStatus, final int level, final int chargeUAh) { boolean doWrite = false; @@ -12339,6 +12345,7 @@ public class BatteryStatsImpl extends BatteryStats { // This should probably be exposed in the API, though it's not critical public static final int BATTERY_PLUGGED_NONE = OsProtoEnums.BATTERY_PLUGGED_NONE; // = 0 + @GuardedBy("this") public void setBatteryStateLocked(final int status, final int health, final int plugType, final int level, /* not final */ int temp, final int volt, final int chargeUAh, final int chargeFullUAh) { @@ -13154,6 +13161,7 @@ public class BatteryStatsImpl extends BatteryStats { } } + @GuardedBy("this") public void dumpConstantsLocked(PrintWriter pw) { mConstants.dumpLocked(pw); } diff --git a/core/java/com/android/internal/os/FuseAppLoop.java b/core/java/com/android/internal/os/FuseAppLoop.java index 088e7268b984f..12405ebce057d 100644 --- a/core/java/com/android/internal/os/FuseAppLoop.java +++ b/core/java/com/android/internal/os/FuseAppLoop.java @@ -283,6 +283,7 @@ public class FuseAppLoop implements Handler.Callback { return -OsConstants.EBADF; } + @GuardedBy("mLock") private CallbackEntry getCallbackEntryOrThrowLocked(long inode) throws ErrnoException { final CallbackEntry entry = mCallbackMap.get(checkInode(inode)); if (entry == null) { @@ -291,12 +292,14 @@ public class FuseAppLoop implements Handler.Callback { return entry; } + @GuardedBy("mLock") private void recycleLocked(Args args) { if (mArgsPool.size() < ARGS_POOL_SIZE) { mArgsPool.add(args); } } + @GuardedBy("mLock") private void replySimpleLocked(long unique, int result) { if (mInstance != 0) { native_replySimple(mInstance, unique, result); From a36dc621ef0b86a0bd46f1d4f5a719a466ba1800 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 5 Feb 2018 17:19:22 -0800 Subject: [PATCH 2/2] Frameworks: Annotate trivial @GuardedBy in services/core Add @GuardedBy for simple functions that require a single lock and are named XYZLocked. Derived by errorprone. Bug: 73000847 Test: m Test: m javac-check-framework RUN_ERROR_PRONE=true Change-Id: I6993325b11c71a4ec27c21935fb54a954d95455f --- .../android/server/AlarmManagerService.java | 1 + .../server/ForceAppStandbyTracker.java | 5 ++ .../server/InputMethodManagerService.java | 6 +++ .../com/android/server/ServiceWatcher.java | 3 ++ .../android/server/StorageManagerService.java | 7 +++ .../server/am/ActivityManagerService.java | 50 +++++++++++++++++++ .../com/android/server/am/ActivityStack.java | 3 ++ .../server/am/ActivityStackSupervisor.java | 3 ++ .../server/am/BatteryExternalStatsWorker.java | 3 ++ .../server/am/PersistentConnection.java | 5 ++ .../server/am/ProcessStatsService.java | 1 + .../server/content/ContentService.java | 2 + .../android/server/content/SyncLogger.java | 2 + .../fingerprint/FingerprintsUserState.java | 3 ++ .../server/hdmi/HdmiCecLocalDeviceTv.java | 2 + .../server/hdmi/HdmiControlService.java | 1 + .../android/server/job/JobServiceContext.java | 13 +++++ .../controllers/ConnectivityController.java | 4 ++ .../server/media/AudioPlayerStateMonitor.java | 1 + .../net/NetworkPolicyManagerService.java | 2 + .../server/net/NetworkStatsService.java | 11 ++++ .../NotificationManagerService.java | 1 + .../pm/InstantAppResolverConnection.java | 2 + .../server/pm/PackageInstallerService.java | 5 ++ .../server/pm/PackageInstallerSession.java | 14 ++++++ .../server/pm/PackageManagerService.java | 3 ++ .../android/server/pm/ShortcutService.java | 17 +++++++ .../android/server/pm/UserManagerService.java | 3 ++ .../permission/PermissionManagerService.java | 2 + .../pm/permission/PermissionSettings.java | 8 +++ .../server/power/BatterySaverPolicy.java | 1 + .../batterysaver/BatterySavingStats.java | 3 ++ .../power/batterysaver/FileUpdater.java | 2 + .../server/stats/StatsCompanionService.java | 1 + .../server/wm/SurfaceAnimationRunner.java | 2 + .../server/wm/TaskSnapshotPersister.java | 2 + 36 files changed, 194 insertions(+) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 45b2118db1f3f..7ab5812fd31a2 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -4061,6 +4061,7 @@ class AlarmManagerService extends SystemService { /** * Deliver an alarm and set up the post-delivery handling appropriately */ + @GuardedBy("mLock") public void deliverLocked(Alarm alarm, long nowELAPSED, boolean allowWhileIdle) { if (alarm.operation != null) { // PendingIntent alarm diff --git a/services/core/java/com/android/server/ForceAppStandbyTracker.java b/services/core/java/com/android/server/ForceAppStandbyTracker.java index 100680df637da..b65d126af2b7c 100644 --- a/services/core/java/com/android/server/ForceAppStandbyTracker.java +++ b/services/core/java/com/android/server/ForceAppStandbyTracker.java @@ -497,6 +497,7 @@ public class ForceAppStandbyTracker { /** * Update {@link #mRunAnyRestrictedPackages} with the current app ops state. */ + @GuardedBy("mLock") private void refreshForcedAppStandbyUidPackagesLocked() { mRunAnyRestrictedPackages.clear(); final List ops = mAppOpsManager.getPackagesForOps( @@ -536,6 +537,7 @@ public class ForceAppStandbyTracker { /** * Update {@link #mForceAllAppsStandby} and notifies the listeners. */ + @GuardedBy("mLock") private void toggleForceAllAppsStandbyLocked(boolean enable) { if (enable == mForceAllAppsStandby) { return; @@ -545,6 +547,7 @@ public class ForceAppStandbyTracker { mHandler.notifyForceAllAppsStandbyChanged(); } + @GuardedBy("mLock") private int findForcedAppStandbyUidPackageIndexLocked(int uid, @NonNull String packageName) { final int size = mRunAnyRestrictedPackages.size(); if (size > 8) { @@ -563,6 +566,7 @@ public class ForceAppStandbyTracker { /** * @return whether a uid package-name pair is in mRunAnyRestrictedPackages. */ + @GuardedBy("mLock") boolean isRunAnyRestrictedLocked(int uid, @NonNull String packageName) { return findForcedAppStandbyUidPackageIndexLocked(uid, packageName) >= 0; } @@ -570,6 +574,7 @@ public class ForceAppStandbyTracker { /** * Add to / remove from {@link #mRunAnyRestrictedPackages}. */ + @GuardedBy("mLock") boolean updateForcedAppStandbyUidPackageLocked(int uid, @NonNull String packageName, boolean restricted) { final int index = findForcedAppStandbyUidPackageIndexLocked(uid, packageName); diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 93f7f1d12922d..bdeb23163e7e6 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -1166,6 +1166,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mImePackageAppeared = false; } + @GuardedBy("mMethodMap") private boolean shouldRebuildInputMethodListLocked() { // This method is guaranteed to be called only by getRegisteredHandler(). @@ -1467,6 +1468,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub setSelectedInputMethodAndSubtypeLocked(defIm, NOT_A_SUBTYPE_ID, false); } + @GuardedBy("mMethodMap") private void switchUserLocked(int newUserId) { if (DEBUG) Slog.d(TAG, "Switching user stage 1/3. newUserId=" + newUserId + " currentUserId=" + mSettings.getCurrentUserId()); @@ -1817,6 +1819,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return flags; } + @GuardedBy("mMethodMap") @NonNull InputBindResult attachNewInputLocked( /* @InputMethodClient.StartInputReason */ final int startInputReason, boolean initial) { @@ -1846,6 +1849,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub mCurId, mCurSeq, mCurUserActionNotificationSequenceNumber); } + @GuardedBy("mMethodMap") @NonNull InputBindResult startInputLocked( /* @InputMethodClient.StartInputReason */ final int startInputReason, @@ -1889,6 +1893,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub controlFlags, startInputReason); } + @GuardedBy("mMethodMap") @NonNull InputBindResult startInputUncheckedLocked(@NonNull ClientState cs, IInputContext inputContext, /* @InputConnectionInspector.missingMethods */ final int missingMethods, @@ -3642,6 +3647,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return false; } + @GuardedBy("mMethodMap") void buildInputMethodListLocked(boolean resetDefaultEnabledIme) { if (DEBUG) { Slog.d(TAG, "--- re-buildInputMethodList reset = " + resetDefaultEnabledIme diff --git a/services/core/java/com/android/server/ServiceWatcher.java b/services/core/java/com/android/server/ServiceWatcher.java index f4238f21f47c2..42c836eab7d7b 100644 --- a/services/core/java/com/android/server/ServiceWatcher.java +++ b/services/core/java/com/android/server/ServiceWatcher.java @@ -199,6 +199,7 @@ public class ServiceWatcher implements ServiceConnection { * bound. * @returns {@code true} if a valid package was found to bind to. */ + @GuardedBy("mLock") private boolean bindBestPackageLocked(String justCheckThisPackage, boolean forceRebind) { Intent intent = new Intent(mAction); if (justCheckThisPackage != null) { @@ -273,6 +274,7 @@ public class ServiceWatcher implements ServiceConnection { return true; } + @GuardedBy("mLock") private void unbindLocked() { ComponentName component; component = mBoundComponent; @@ -287,6 +289,7 @@ public class ServiceWatcher implements ServiceConnection { } } + @GuardedBy("mLock") private void bindToPackageLocked(ComponentName component, int version, int userId) { Intent intent = new Intent(mAction); intent.setComponent(component); diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 84b93e36c602f..1a0068de6852b 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -809,6 +809,7 @@ class StorageManagerService extends IStorageManager.Stub } } + @GuardedBy("mLock") private void addInternalVolumeLocked() { // Create a stub volume that represents internal storage final VolumeInfo internal = new VolumeInfo(VolumeInfo.ID_PRIVATE_INTERNAL, @@ -1109,6 +1110,7 @@ class StorageManagerService extends IStorageManager.Stub } }; + @GuardedBy("mLock") private void onDiskScannedLocked(DiskInfo disk) { int volumeCount = 0; for (int i = 0; i < mVolumes.size(); i++) { @@ -1134,6 +1136,7 @@ class StorageManagerService extends IStorageManager.Stub mCallbacks.notifyDiskScanned(disk, volumeCount); } + @GuardedBy("mLock") private void onVolumeCreatedLocked(VolumeInfo vol) { if (mPms.isOnlyCoreApps()) { Slog.d(TAG, "System booted in core-only mode; ignoring volume " + vol.getId()); @@ -1209,6 +1212,7 @@ class StorageManagerService extends IStorageManager.Stub return true; } + @GuardedBy("mLock") private void onVolumeStateChangedLocked(VolumeInfo vol, int oldState, int newState) { // Remember that we saw this volume so we're ready to accept user // metadata, or so we can annoy them when a private volume is ejected @@ -1299,6 +1303,7 @@ class StorageManagerService extends IStorageManager.Stub } } + @GuardedBy("mLock") private void onMoveStatusLocked(int status) { if (mMoveCallback == null) { Slog.w(TAG, "Odd, status but no move requested"); @@ -1515,6 +1520,7 @@ class StorageManagerService extends IStorageManager.Stub } } + @GuardedBy("mLock") private void readSettingsLocked() { mRecords.clear(); mPrimaryStorageUuid = getDefaultPrimaryStorageUuid(); @@ -1559,6 +1565,7 @@ class StorageManagerService extends IStorageManager.Stub } } + @GuardedBy("mLock") private void writeSettingsLocked() { FileOutputStream fos = null; try { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index cee1ff97030f9..7d0f13774cd4e 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3292,6 +3292,7 @@ public class ActivityManagerService extends IActivityManager.Stub * Update AMS states when an activity is resumed. This should only be called by * {@link ActivityStack#setResumedActivityLocked} when an activity is resumed. */ + @GuardedBy("this") void setResumedActivityUncheckLocked(ActivityRecord r, String reason) { final TaskRecord task = r.getTask(); if (task.isActivityTypeStandard()) { @@ -3826,6 +3827,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags, String hostingType, ComponentName hostingName, boolean allowWhileBooting, @@ -3836,6 +3838,7 @@ public class ActivityManagerService extends IActivityManager.Stub null /* crashHandler */); } + @GuardedBy("this") final ProcessRecord startProcessLocked(String processName, ApplicationInfo info, boolean knownToBeDead, int intentFlags, String hostingType, ComponentName hostingName, boolean allowWhileBooting, boolean isolated, int isolatedUid, boolean keepIfLarge, @@ -3952,6 +3955,7 @@ public class ActivityManagerService extends IActivityManager.Stub return (ai.flags&ApplicationInfo.FLAG_PERSISTENT) != 0; } + @GuardedBy("this") private final void startProcessLocked(ProcessRecord app, String hostingType, String hostingNameStr) { startProcessLocked(app, hostingType, hostingNameStr, null /* abiOverride */); @@ -3960,6 +3964,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** * @return {@code true} if process start is successful, false otherwise. */ + @GuardedBy("this") private final boolean startProcessLocked(ProcessRecord app, String hostingType, String hostingNameStr, String abiOverride) { if (app.pendingStart) { @@ -5134,6 +5139,7 @@ public class ActivityManagerService extends IActivityManager.Stub .supportsLocalVoiceInteraction(); } + @GuardedBy("this") void onLocalVoiceInteractionStartedLocked(IBinder activity, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor) { ActivityRecord activityToCallback = ActivityRecord.forTokenLocked(activity); @@ -5632,6 +5638,7 @@ public class ActivityManagerService extends IActivityManager.Stub * as a result of that process going away. Clears out all connections * to the process. */ + @GuardedBy("this") private final void handleAppDiedLocked(ProcessRecord app, boolean restarting, boolean allowRestart) { int pid = app.pid; @@ -5778,10 +5785,12 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final void appDiedLocked(ProcessRecord app) { appDiedLocked(app, app.pid, app.thread, false); } + @GuardedBy("this") final void appDiedLocked(ProcessRecord app, int pid, IApplicationThread thread, boolean fromBinderDied) { // First check if this ProcessRecord is actually active for the pid. @@ -6239,6 +6248,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final void showLaunchWarningLocked(final ActivityRecord cur, final ActivityRecord next) { if (!mLaunchWarningShown) { mLaunchWarningShown = true; @@ -6665,6 +6675,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void closeSystemDialogsLocked(String reason) { Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY @@ -6771,11 +6782,13 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") private void forceStopPackageLocked(final String packageName, int uid, String reason) { forceStopPackageLocked(packageName, UserHandle.getAppId(uid), false, false, true, false, false, UserHandle.getUserId(uid), reason); } + @GuardedBy("this") private void finishForceStopPackageLocked(final String packageName, int uid) { Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED, Uri.fromParts("package", packageName, null)); @@ -6791,6 +6804,7 @@ public class ActivityManagerService extends IActivityManager.Stub } + @GuardedBy("this") private final boolean killPackageProcessesLocked(String packageName, int appId, int userId, int minOomAdj, boolean callerWillRestart, boolean allowRestart, boolean doit, boolean evenPersistent, String reason) { @@ -6962,6 +6976,7 @@ public class ActivityManagerService extends IActivityManager.Stub return didSomething; } + @GuardedBy("this") final boolean forceStopPackageLocked(String packageName, int appId, boolean callerWillRestart, boolean purgeCache, boolean doit, boolean evenPersistent, boolean uninstalling, int userId, String reason) { @@ -7173,6 +7188,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") boolean removeProcessLocked(ProcessRecord app, boolean callerWillRestart, boolean allowRestart, String reason) { final String name = app.processName; @@ -7227,6 +7243,7 @@ public class ActivityManagerService extends IActivityManager.Stub return needRestart; } + @GuardedBy("this") private final void processContentProviderPublishTimedOutLocked(ProcessRecord app) { cleanupAppInLaunchingProvidersLocked(app, true); removeProcessLocked(app, false, true, "timeout publishing content providers"); @@ -7287,6 +7304,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") private final boolean attachApplicationLocked(IApplicationThread thread, int pid, int callingUid, long startSeq) { @@ -9140,6 +9158,7 @@ public class ActivityManagerService extends IActivityManager.Stub grantEphemeralAccess(userId, intent, targetAppId, ephemeralAppId); } + @GuardedBy("this") private UriPermission findUriPermissionLocked(int targetUid, GrantUri grantUri) { final ArrayMap targetUris = mGrantedUriPermissions.get(targetUid); if (targetUris != null) { @@ -9148,6 +9167,7 @@ public class ActivityManagerService extends IActivityManager.Stub return null; } + @GuardedBy("this") private UriPermission findOrCreateUriPermissionLocked(String sourcePkg, String targetPkg, int targetUid, GrantUri grantUri) { ArrayMap targetUris = mGrantedUriPermissions.get(targetUid); @@ -9165,6 +9185,7 @@ public class ActivityManagerService extends IActivityManager.Stub return perm; } + @GuardedBy("this") private final boolean checkUriPermissionLocked(GrantUri grantUri, int uid, final int modeFlags) { final boolean persistable = (modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0; @@ -9235,6 +9256,7 @@ public class ActivityManagerService extends IActivityManager.Stub * If you already know the uid of the target, you can supply it in * lastTargetUid else set that to -1. */ + @GuardedBy("this") int checkGrantUriPermissionLocked(int callingUid, String targetPkg, GrantUri grantUri, final int modeFlags, int lastTargetUid) { if (!Intent.isAccessUriMode(modeFlags)) { @@ -9397,6 +9419,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void grantUriPermissionUncheckedLocked(int targetUid, String targetPkg, GrantUri grantUri, final int modeFlags, UriPermissionOwner owner) { if (!Intent.isAccessUriMode(modeFlags)) { @@ -9426,6 +9449,7 @@ public class ActivityManagerService extends IActivityManager.Stub perm.grantModes(modeFlags, owner); } + @GuardedBy("this") void grantUriPermissionLocked(int callingUid, String targetPkg, GrantUri grantUri, final int modeFlags, UriPermissionOwner owner, int targetUserId) { if (targetPkg == null) { @@ -9477,6 +9501,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** * Like checkGrantUriPermissionLocked, but takes an Intent. */ + @GuardedBy("this") NeededUriGrants checkGrantUriPermissionFromIntentLocked(int callingUid, String targetPkg, Intent intent, int mode, NeededUriGrants needed, int targetUserId) { if (DEBUG_URI_PERMISSION) Slog.v(TAG_URI_PERMISSION, @@ -9563,6 +9588,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** * Like grantUriPermissionUncheckedLocked, but takes an Intent. */ + @GuardedBy("this") void grantUriPermissionUncheckedFromIntentLocked(NeededUriGrants needed, UriPermissionOwner owner) { if (needed != null) { @@ -9574,6 +9600,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void grantUriPermissionFromIntentLocked(int callingUid, String targetPkg, Intent intent, UriPermissionOwner owner, int targetUserId) { NeededUriGrants needed = checkGrantUriPermissionFromIntentLocked(callingUid, targetPkg, @@ -9618,6 +9645,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void removeUriPermissionIfNeededLocked(UriPermission perm) { if (perm.modeFlags == 0) { final ArrayMap perms = mGrantedUriPermissions.get( @@ -9634,6 +9662,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") private void revokeUriPermissionLocked(String targetPackage, int callingUid, GrantUri grantUri, final int modeFlags) { if (DEBUG_URI_PERMISSION) Slog.v(TAG_URI_PERMISSION, @@ -9768,6 +9797,7 @@ public class ActivityManagerService extends IActivityManager.Stub * @param targetOnly When {@code true}, only remove permissions where the app is the target, * not source. */ + @GuardedBy("this") private void removeUriPermissionsForPackageLocked( String packageName, int userHandle, boolean persistable, boolean targetOnly) { if (userHandle == UserHandle.USER_ALL && packageName == null) { @@ -9954,6 +9984,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") private void readGrantedUriPermissionsLocked() { if (DEBUG_URI_PERMISSION) Slog.v(TAG_URI_PERMISSION, "readGrantedUriPermissions()"); @@ -10116,6 +10147,7 @@ public class ActivityManagerService extends IActivityManager.Stub * * @return if any mutations occured that require persisting. */ + @GuardedBy("this") private boolean maybePrunePersistedUriGrantsLocked(int uid) { final ArrayMap perms = mGrantedUriPermissions.get(uid); if (perms == null) return false; @@ -12617,6 +12649,7 @@ public class ActivityManagerService extends IActivityManager.Stub // GLOBAL MANAGEMENT // ========================================================= + @GuardedBy("this") final ProcessRecord newProcessRecordLocked(ApplicationInfo info, String customProcess, boolean isolated, int isolatedUid) { String proc = customProcess != null ? customProcess : info.processName; @@ -12706,6 +12739,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final ProcessRecord addAppLocked(ApplicationInfo info, String customProcess, boolean isolated, String abiOverride, ActiveInstrumentation instrumentation) { ProcessRecord app; @@ -12825,6 +12859,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void finishRunningVoiceLocked() { if (mRunningVoice != null) { mRunningVoice = null; @@ -12840,6 +12875,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void updateSleepIfNeededLocked() { final boolean shouldSleep = !mStackSupervisor.hasAwakeDisplay(); final boolean wasSleeping = mSleeping; @@ -12944,6 +12980,7 @@ public class ActivityManagerService extends IActivityManager.Stub Binder.restoreCallingIdentity(origId); } + @GuardedBy("this") void startRunningVoiceLocked(IVoiceInteractionSession session, int targetUid) { Slog.d(TAG, "<<< startRunningVoiceLocked()"); mVoiceWakeLock.setWorkSource(new WorkSource(targetUid)); @@ -16179,6 +16216,7 @@ public class ActivityManagerService extends IActivityManager.Stub return false; } + @GuardedBy("this") void dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args, int opti, boolean dumpAll, String dumpPackage, int dumpAppId) { boolean needSep = false; @@ -16632,6 +16670,7 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(" mForceBackgroundCheck=" + mForceBackgroundCheck); } + @GuardedBy("this") void writeProcessesToProtoLocked(ProtoOutputStream proto, String dumpPackage) { int numPers = 0; @@ -17459,6 +17498,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void dumpPermissionsLocked(FileDescriptor fd, PrintWriter pw, String[] args, int opti, boolean dumpAll, String dumpPackage) { boolean needSep = false; @@ -19531,6 +19571,7 @@ public class ActivityManagerService extends IActivityManager.Stub * @return Returns true if the given process has been restarted, so the * app that was passed in must remain on the process lists. */ + @GuardedBy("this") private final boolean cleanUpApplicationRecordLocked(ProcessRecord app, boolean restarting, boolean allowRestart, int index, boolean replacingPid) { if (index >= 0) { @@ -20620,6 +20661,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final int broadcastIntentLocked(ProcessRecord callerApp, String callerPackage, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, @@ -21609,6 +21651,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") void finishInstrumentationLocked(ProcessRecord app, int resultCode, Bundle results) { if (app.instr == null) { Slog.w(TAG, "finishInstrumentation called on non-instrumented: " + app); @@ -24007,6 +24050,7 @@ public class ActivityManagerService extends IActivityManager.Stub return applyOomAdjLocked(app, doingAll, now, SystemClock.elapsedRealtime()); } + @GuardedBy("this") final void updateProcessForegroundLocked(ProcessRecord proc, boolean isForeground, boolean oomAdj) { if (isForeground != proc.foregroundServices) { @@ -24076,6 +24120,7 @@ public class ActivityManagerService extends IActivityManager.Stub * if necessary, or skip. * @return whether updateOomAdjLocked(app) was successful. */ + @GuardedBy("this") final boolean updateOomAdjLocked(ProcessRecord app, boolean oomAdjAll) { final ActivityRecord TOP_ACT = resumedAppLocked(); final ProcessRecord TOP_APP = TOP_ACT != null ? TOP_ACT.app : null; @@ -24100,6 +24145,7 @@ public class ActivityManagerService extends IActivityManager.Stub return success; } + @GuardedBy("this") final void updateOomAdjLocked() { final ActivityRecord TOP_ACT = resumedAppLocked(); final ProcessRecord TOP_APP = TOP_ACT != null ? TOP_ACT.app : null; @@ -24820,6 +24866,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** * Whitelists {@code targetUid} to temporarily bypass Power Save mode. */ + @GuardedBy("this") void tempWhitelistForPendingIntentLocked(int callerPid, int callerUid, int targetUid, long duration, String tag) { if (DEBUG_WHITELISTS) { @@ -24852,6 +24899,7 @@ public class ActivityManagerService extends IActivityManager.Stub /** * Whitelists {@code targetUid} to temporarily bypass Power Save mode. */ + @GuardedBy("this") void tempWhitelistUidLocked(int targetUid, long duration, String tag) { mPendingTempWhitelist.put(targetUid, new PendingTempWhitelist(targetUid, duration, tag)); setUidTempWhitelistStateLocked(targetUid, true); @@ -24891,6 +24939,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final void setAppIdTempWhitelistStateLocked(int appId, boolean onWhitelist) { boolean changed = false; for (int i=mActiveUids.size()-1; i>=0; i--) { @@ -24905,6 +24954,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } + @GuardedBy("this") final void setUidTempWhitelistStateLocked(int uid, boolean onWhitelist) { boolean changed = false; final UidRecord uidRec = mActiveUids.get(uid); diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index ab2dc36d66d0a..f3deb8dc5164c 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -138,6 +138,7 @@ import android.util.SparseArray; import android.util.proto.ProtoOutputStream; import android.view.Display; +import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IVoiceInteractor; import com.android.internal.os.BatteryStatsImpl; @@ -2211,6 +2212,7 @@ class ActivityStack extends ConfigurationContai * Use {@link ActivityStackSupervisor#resumeFocusedStackTopActivityLocked} to resume the * right activity for the current system state. */ + @GuardedBy("mService") boolean resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options) { if (mStackSupervisor.inResumeTopActivity) { // Don't even start recursing. @@ -2250,6 +2252,7 @@ class ActivityStack extends ConfigurationContai mStackSupervisor.mRecentTasks.add(r.getTask()); } + @GuardedBy("mService") private boolean resumeTopActivityInnerLocked(ActivityRecord prev, ActivityOptions options) { if (!mService.mBooting && !mService.mBooted) { // Not ready yet! diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index a0f31cd213b7a..41d90ef015120 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -166,6 +166,7 @@ import android.util.proto.ProtoOutputStream; import android.view.Display; import android.view.RemoteAnimationAdapter; +import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.ReferrerIntent; import com.android.internal.os.logging.MetricsLoggerWrapper; @@ -1858,6 +1859,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D * Called when the frontmost task is idle. * @return the state of mService.mBooting before this was called. */ + @GuardedBy("mService") private boolean checkFinishBootingLocked() { final boolean booting = mService.mBooting; boolean enableScreen = false; @@ -1873,6 +1875,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D } // Checked. + @GuardedBy("mService") final ActivityRecord activityIdleInternalLocked(final IBinder token, boolean fromTimeout, boolean processPausingActivities, Configuration config) { if (DEBUG_ALL) Slog.v(TAG, "Activity idle: " + token); diff --git a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java index 927b72ceb37e2..ef82f36fa79f0 100644 --- a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java +++ b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java @@ -182,6 +182,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { mExecutorService.shutdownNow(); } + @GuardedBy("this") private Future scheduleSyncLocked(String reason, int flags) { if (mExecutorService.isShutdown()) { return CompletableFuture.failedFuture(new IllegalStateException("worker shutdown")); @@ -248,6 +249,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { } }; + @GuardedBy("mWorkerLock") private void updateExternalStatsLocked(final String reason, int updateFlags) { // We will request data from external processes asynchronously, and wait on a timeout. SynchronousResultReceiver wifiReceiver = null; @@ -372,6 +374,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { return null; } + @GuardedBy("mWorkerLock") private WifiActivityEnergyInfo extractDeltaLocked(WifiActivityEnergyInfo latest) { final long timePeriodMs = latest.mTimestamp - mLastInfo.mTimestamp; final long lastScanMs = mLastInfo.mControllerScanTimeMs; diff --git a/services/core/java/com/android/server/am/PersistentConnection.java b/services/core/java/com/android/server/am/PersistentConnection.java index 52eaca10cb4d3..c5edb26892f81 100644 --- a/services/core/java/com/android/server/am/PersistentConnection.java +++ b/services/core/java/com/android/server/am/PersistentConnection.java @@ -220,6 +220,7 @@ public abstract class PersistentConnection { } } + @GuardedBy("mLock") public final void bindInnerLocked(boolean resetBackoff) { unscheduleRebindLocked(); @@ -260,6 +261,7 @@ public abstract class PersistentConnection { } } + @GuardedBy("mLock") private void cleanUpConnectionLocked() { mIsConnected = false; mService = null; @@ -276,6 +278,7 @@ public abstract class PersistentConnection { } } + @GuardedBy("mLock") private final void unbindLocked() { unscheduleRebindLocked(); @@ -289,11 +292,13 @@ public abstract class PersistentConnection { cleanUpConnectionLocked(); } + @GuardedBy("mLock") void unscheduleRebindLocked() { injectRemoveCallbacks(mBindForBackoffRunnable); mRebindScheduled = false; } + @GuardedBy("mLock") void scheduleRebindLocked() { unbindLocked(); diff --git a/services/core/java/com/android/server/am/ProcessStatsService.java b/services/core/java/com/android/server/am/ProcessStatsService.java index edf565abd7df3..c10d81b96cbcf 100644 --- a/services/core/java/com/android/server/am/ProcessStatsService.java +++ b/services/core/java/com/android/server/am/ProcessStatsService.java @@ -135,6 +135,7 @@ public final class ProcessStatsService extends IProcessStats.Stub { return mMemFactorLowered; } + @GuardedBy("mAm") public boolean setMemFactorLocked(int memFactor, boolean screenOn, long now) { mMemFactorLowered = memFactor < mLastMemOnlyState; mLastMemOnlyState = memFactor; diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java index 1ee0548a5bf73..c3f020ade635f 100644 --- a/services/core/java/com/android/server/content/ContentService.java +++ b/services/core/java/com/android/server/content/ContentService.java @@ -1116,6 +1116,7 @@ public final class ContentService extends IContentService.Stub { return (pi != null) ? pi.packageName : null; } + @GuardedBy("mCache") private ArrayMap, Bundle> findOrCreateCacheLocked(int userId, String providerPackageName) { ArrayMap, Bundle>> userCache = mCache.get(userId); @@ -1131,6 +1132,7 @@ public final class ContentService extends IContentService.Stub { return packageCache; } + @GuardedBy("mCache") private void invalidateCacheLocked(int userId, String providerPackageName, Uri uri) { ArrayMap, Bundle>> userCache = mCache.get(userId); if (userCache == null) return; diff --git a/services/core/java/com/android/server/content/SyncLogger.java b/services/core/java/com/android/server/content/SyncLogger.java index 75c01819a9eaa..20aec7e4ae29d 100644 --- a/services/core/java/com/android/server/content/SyncLogger.java +++ b/services/core/java/com/android/server/content/SyncLogger.java @@ -194,6 +194,7 @@ public class SyncLogger { } } + @GuardedBy("mLock") private void openLogLocked(long now) { // If we already have a log file opened and the date has't changed, just use it. final long day = now % DateUtils.DAY_IN_MILLIS; @@ -219,6 +220,7 @@ public class SyncLogger { } } + @GuardedBy("mLock") private void closeCurrentLogLocked() { IoUtils.closeQuietly(mLogWriter); mLogWriter = null; diff --git a/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java b/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java index 0976a22f5e139..b0cde2dd65ae8 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintsUserState.java @@ -202,6 +202,7 @@ class FingerprintsUserState { } } + @GuardedBy("this") private void readStateSyncLocked() { FileInputStream in; if (!mFile.exists()) { @@ -226,6 +227,7 @@ class FingerprintsUserState { } } + @GuardedBy("this") private void parseStateLocked(XmlPullParser parser) throws IOException, XmlPullParserException { final int outerDepth = parser.getDepth(); @@ -243,6 +245,7 @@ class FingerprintsUserState { } } + @GuardedBy("this") private void parseFingerprintsLocked(XmlPullParser parser) throws IOException, XmlPullParserException { diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 1e09383db56d1..de0f29851da5e 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -1299,6 +1299,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { /** * Return external input devices. */ + @GuardedBy("mLock") List getSafeExternalInputsLocked() { return mSafeExternalInputs; } @@ -1421,6 +1422,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { } } + @GuardedBy("mLock") List getSafeCecDevicesLocked() { ArrayList infoList = new ArrayList<>(); for (HdmiDeviceInfo info : mSafeAllDeviceInfos) { diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 3d079ccb0cad4..b06dba9f9627c 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -1097,6 +1097,7 @@ public final class HdmiControlService extends SystemService { } } + @GuardedBy("mLock") private List getMhlDevicesLocked() { return mMhlDevices; } diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java index 37b39907e9763..4988974e95db2 100644 --- a/services/core/java/com/android/server/job/JobServiceContext.java +++ b/services/core/java/com/android/server/job/JobServiceContext.java @@ -295,10 +295,12 @@ public final class JobServiceContext implements ServiceConnection { } /** Called externally when a job that was scheduled for execution should be cancelled. */ + @GuardedBy("mLock") void cancelExecutingJobLocked(int reason, String debugReason) { doCancelLocked(reason, debugReason); } + @GuardedBy("mLock") void preemptExecutingJobLocked() { doCancelLocked(JobParameters.REASON_PREEMPT, "cancelled due to preemption"); } @@ -319,6 +321,7 @@ public final class JobServiceContext implements ServiceConnection { return mTimeoutElapsed; } + @GuardedBy("mLock") boolean timeoutIfExecutingLocked(String pkgName, int userId, boolean matchJobId, int jobId, String reason) { final JobStatus executing = getRunningJobLocked(); @@ -512,6 +515,7 @@ public final class JobServiceContext implements ServiceConnection { } } + @GuardedBy("mLock") void doServiceBoundLocked() { removeOpTimeOutLocked(); handleServiceBoundLocked(); @@ -531,6 +535,7 @@ public final class JobServiceContext implements ServiceConnection { } } + @GuardedBy("mLock") void doCallbackLocked(boolean reschedule, String reason) { if (DEBUG) { Slog.d(TAG, "doCallback of : " + mRunningJob @@ -550,6 +555,7 @@ public final class JobServiceContext implements ServiceConnection { } } + @GuardedBy("mLock") void doCancelLocked(int arg1, String debugReason) { if (mVerb == VERB_FINISHED) { if (DEBUG) { @@ -567,6 +573,7 @@ public final class JobServiceContext implements ServiceConnection { } /** Start the job on the service. */ + @GuardedBy("mLock") private void handleServiceBoundLocked() { if (DEBUG) { Slog.d(TAG, "handleServiceBound for " + getRunningJobNameLocked()); @@ -605,6 +612,7 @@ public final class JobServiceContext implements ServiceConnection { * _EXECUTING -> Error * _STOPPING -> Error */ + @GuardedBy("mLock") private void handleStartedLocked(boolean workOngoing) { switch (mVerb) { case VERB_STARTING: @@ -637,6 +645,7 @@ public final class JobServiceContext implements ServiceConnection { * _STARTING -> Error * _PENDING -> Error */ + @GuardedBy("mLock") private void handleFinishedLocked(boolean reschedule, String reason) { switch (mVerb) { case VERB_EXECUTING: @@ -659,6 +668,7 @@ public final class JobServiceContext implements ServiceConnection { * in the message queue. * _ENDING -> No point in doing anything here, so we ignore. */ + @GuardedBy("mLock") private void handleCancelLocked(String reason) { if (JobSchedulerService.DEBUG) { Slog.d(TAG, "Handling cancel for: " + mRunningJob.getJobId() + " " @@ -683,6 +693,7 @@ public final class JobServiceContext implements ServiceConnection { } /** Process MSG_TIMEOUT here. */ + @GuardedBy("mLock") private void handleOpTimeoutLocked() { switch (mVerb) { case VERB_BINDING: @@ -722,6 +733,7 @@ public final class JobServiceContext implements ServiceConnection { * Already running, need to stop. Will switch {@link #mVerb} from VERB_EXECUTING -> * VERB_STOPPING. */ + @GuardedBy("mLock") private void sendStopMessageLocked(String reason) { removeOpTimeOutLocked(); if (mVerb != VERB_EXECUTING) { @@ -747,6 +759,7 @@ public final class JobServiceContext implements ServiceConnection { * or from acknowledging the stop message we sent. Either way, we're done tracking it and * we want to clean up internally. */ + @GuardedBy("mLock") private void closeAndCleanupJobLocked(boolean reschedule, String reason) { final JobStatus completedJob; if (mVerb == VERB_FINISHED) { diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java index 13873e476894f..77e813e086ce9 100644 --- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java +++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java @@ -92,6 +92,7 @@ public final class ConnectivityController extends StateController implements mNetPolicyManager.registerListener(mNetPolicyListener); } + @GuardedBy("mLock") @Override public void maybeStartTrackingJobLocked(JobStatus jobStatus, JobStatus lastJob) { if (jobStatus.hasConnectivityConstraint()) { @@ -101,6 +102,7 @@ public final class ConnectivityController extends StateController implements } } + @GuardedBy("mLock") @Override public void maybeStopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob, boolean forUpdate) { @@ -325,6 +327,7 @@ public final class ConnectivityController extends StateController implements } }; + @GuardedBy("mLock") @Override public void dumpControllerStateLocked(PrintWriter pw, int filterUid) { pw.print("Connectivity: connected="); @@ -348,6 +351,7 @@ public final class ConnectivityController extends StateController implements } } + @GuardedBy("mLock") @Override public void dumpControllerStateLocked(ProtoOutputStream proto, long fieldId, int filterUid) { final long token = proto.start(fieldId); diff --git a/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java b/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java index 7881a952eab9f..648c782a7d1eb 100644 --- a/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java +++ b/services/core/java/com/android/server/media/AudioPlayerStateMonitor.java @@ -289,6 +289,7 @@ class AudioPlayerStateMonitor extends IPlaybackConfigDispatcher.Stub { } } + @GuardedBy("mLock") private void sendAudioPlayerActiveStateChangedMessageLocked( final AudioPlaybackConfiguration config, final boolean isRemoved) { for (MessageHandler messageHandler : mListenerMap.values()) { diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index a17dd122f7604..f34662909a857 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -4678,10 +4678,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return subId; } + @GuardedBy("mNetworkPoliciesSecondLock") private int getSubIdLocked(Network network) { return mNetIdToSubId.get(network.netId, INVALID_SUBSCRIPTION_ID); } + @GuardedBy("mNetworkPoliciesSecondLock") private SubscriptionPlan getPrimarySubscriptionPlanLocked(int subId) { final SubscriptionPlan[] plans = mSubscriptionPlans.get(subId); return ArrayUtils.isEmpty(plans) ? null : plans[0]; diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index bfc150e1a9b0e..76c4db1340368 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -405,6 +405,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mNonMonotonicObserver, dropBox, prefix, config.bucketDuration, includeTags); } + @GuardedBy("mStatsLock") private void shutdownLocked() { mContext.unregisterReceiver(mTetherReceiver); mContext.unregisterReceiver(mPollReceiver); @@ -431,6 +432,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mSystemReady = false; } + @GuardedBy("mStatsLock") private void maybeUpgradeLegacyStatsLocked() { File file; try { @@ -909,6 +911,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { * reflect current {@link #mPersistThreshold} value. Always defers to * {@link Global} values when defined. */ + @GuardedBy("mStatsLock") private void updatePersistThresholdsLocked() { mDevRecorder.setPersistThreshold(mSettings.getDevPersistBytes(mPersistThreshold)); mXtRecorder.setPersistThreshold(mSettings.getXtPersistBytes(mPersistThreshold)); @@ -1029,6 +1032,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { * are active on a single {@code iface}, they are combined under a single * {@link NetworkIdentitySet}. */ + @GuardedBy("mStatsLock") private void updateIfacesLocked(Network[] defaultNetworks) { if (!mSystemReady) return; if (LOGV) Slog.v(TAG, "updateIfacesLocked()"); @@ -1128,6 +1132,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { return ident; } + @GuardedBy("mStatsLock") private void recordSnapshotLocked(long currentTime) throws RemoteException { // snapshot and record current counters; read UID stats first to // avoid over counting dev stats. @@ -1163,6 +1168,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { * Bootstrap initial stats snapshot, usually during {@link #systemReady()} * so we have baseline values without double-counting. */ + @GuardedBy("mStatsLock") private void bootstrapStatsLocked() { final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis() : System.currentTimeMillis(); @@ -1197,6 +1203,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { * Periodic poll operation, reading current statistics and recording into * {@link NetworkStatsHistory}. */ + @GuardedBy("mStatsLock") private void performPollLocked(int flags) { if (!mSystemReady) return; if (LOGV) Slog.v(TAG, "performPollLocked(flags=0x" + Integer.toHexString(flags) + ")"); @@ -1258,6 +1265,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { /** * Sample recent statistics summary into {@link EventLog}. */ + @GuardedBy("mStatsLock") private void performSampleLocked() { // TODO: migrate trustedtime fixes to separate binary log events final long trustedTime = mTime.hasCache() ? mTime.currentTimeMillis() : -1; @@ -1295,6 +1303,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { /** * Clean up {@link #mUidRecorder} after UID is removed. */ + @GuardedBy("mStatsLock") private void removeUidsLocked(int... uids) { if (LOGV) Slog.v(TAG, "removeUidsLocked() for UIDs " + Arrays.toString(uids)); @@ -1313,6 +1322,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { /** * Clean up {@link #mUidRecorder} after user is removed. */ + @GuardedBy("mStatsLock") private void removeUserLocked(int userId) { if (LOGV) Slog.v(TAG, "removeUserLocked() for userId=" + userId); @@ -1434,6 +1444,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { } } + @GuardedBy("mStatsLock") private void dumpProtoLocked(FileDescriptor fd) { final ProtoOutputStream proto = new ProtoOutputStream(fd); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index ada002c0c5b07..46235d0d57c71 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -3909,6 +3909,7 @@ public class NotificationManagerService extends SystemService { return true; } + @GuardedBy("mNotificationLock") protected int getNotificationCountLocked(String pkg, int userId, int excludedId, String excludedTag) { int count = 0; diff --git a/services/core/java/com/android/server/pm/InstantAppResolverConnection.java b/services/core/java/com/android/server/pm/InstantAppResolverConnection.java index a9ee41162ae1b..98f421ecf2b8e 100644 --- a/services/core/java/com/android/server/pm/InstantAppResolverConnection.java +++ b/services/core/java/com/android/server/pm/InstantAppResolverConnection.java @@ -141,6 +141,7 @@ final class InstantAppResolverConnection implements DeathRecipient { } } + @GuardedBy("mLock") private void waitForBindLocked(String token) throws TimeoutException, InterruptedException { final long startMillis = SystemClock.uptimeMillis(); while (mBindState != STATE_IDLE) { @@ -250,6 +251,7 @@ final class InstantAppResolverConnection implements DeathRecipient { } } + @GuardedBy("mLock") private void handleBinderDiedLocked() { if (mRemoteInstance != null) { try { diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 59f9dae0619a4..0b32d1a5d69bd 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -226,6 +226,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub { } } + @GuardedBy("mSessions") private void reconcileStagesLocked(String volumeUuid, boolean isEphemeral) { final File stagingDir = buildStagingDir(volumeUuid, isEphemeral); final ArraySet unclaimedStages = newArraySet( @@ -283,6 +284,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub { } } + @GuardedBy("mSessions") private void readSessionsLocked() { if (LOGD) Slog.v(TAG, "readSessionsLocked()"); @@ -340,6 +342,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub { } } + @GuardedBy("mSessions") private void addHistoricalSessionLocked(PackageInstallerSession session) { CharArrayWriter writer = new CharArrayWriter(); IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); @@ -352,6 +355,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub { mHistoricalSessionsByInstaller.get(installerUid) + 1); } + @GuardedBy("mSessions") private void writeSessionsLocked() { if (LOGD) Slog.v(TAG, "writeSessionsLocked()"); @@ -612,6 +616,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub { } } + @GuardedBy("mSessions") private int allocateSessionIdLocked() { int n = 0; int sessionId; diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 3dd5a3415e35d..9c692816aa6e6 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -318,6 +318,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { /** * @return {@code true} iff the installing is app an device owner or affiliated profile owner. */ + @GuardedBy("mLock") private boolean isInstallerDeviceOwnerOrAffiliatedProfileOwnerLocked() { DevicePolicyManagerInternal dpmi = LocalServices.getService(DevicePolicyManagerInternal.class); @@ -334,6 +335,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * * @return {@code true} iff we need to ask to confirm the permissions? */ + @GuardedBy("mLock") private boolean needToAskForPermissionsLocked() { if (mPermissionsManuallyAccepted) { return false; @@ -456,6 +458,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") private void assertPreparedAndNotSealedLocked(String cookie) { assertPreparedAndNotCommittedOrDestroyedLocked(cookie); if (mSealed) { @@ -463,6 +466,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") private void assertPreparedAndNotCommittedOrDestroyedLocked(String cookie) { assertPreparedAndNotDestroyedLocked(cookie); if (mCommitted) { @@ -470,6 +474,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") private void assertPreparedAndNotDestroyedLocked(String cookie) { if (!mPrepared) { throw new IllegalStateException(cookie + " before prepared"); @@ -484,6 +489,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * might point at an ASEC mount point, which is why we delay path resolution * until someone actively works with the session. */ + @GuardedBy("mLock") private File resolveStageDirLocked() throws IOException { if (mResolvedStageDir == null) { if (stageDir != null) { @@ -516,6 +522,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") private void computeProgressLocked(boolean forcePublish) { mProgress = MathUtils.constrain(mClientProgress * 0.8f, 0f, 0.8f) + MathUtils.constrain(mInternalProgress * 0.2f, 0f, 0.2f); @@ -728,6 +735,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * Check if the caller is the owner of this session. Otherwise throw a * {@link SecurityException}. */ + @GuardedBy("mLock") private void assertCallerIsOwnerOrRootLocked() { final int callingUid = Binder.getCallingUid(); if (callingUid != Process.ROOT_UID && callingUid != mInstallerUid) { @@ -738,6 +746,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { /** * If anybody is reading or writing data of the session, throw an {@link SecurityException}. */ + @GuardedBy("mLock") private void assertNoWriteFileTransfersOpenLocked() { // Verify that all writers are hands-off for (RevocableFileDescriptor fd : mFds) { @@ -820,6 +829,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * @throws PackageManagerException if the session was sealed but something went wrong. If the * session was sealed this is the only possible exception. */ + @GuardedBy("mLock") private void sealAndValidateLocked() throws PackageManagerException, IOException { assertNoWriteFileTransfersOpenLocked(); assertPreparedAndNotDestroyedLocked("sealing of session"); @@ -901,6 +911,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { mCallback.onSessionSealedBlocking(this); } + @GuardedBy("mLock") private void commitLocked() throws PackageManagerException { if (mDestroyed) { @@ -1016,6 +1027,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * Note that upgrade compatibility is still performed by * {@link PackageManagerService}. */ + @GuardedBy("mLock") private void validateInstallLocked(@Nullable PackageInfo pkgInfo) throws PackageManagerException { mPackageName = null; @@ -1228,6 +1240,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") private void assertApkConsistentLocked(String tag, ApkLite apk) throws PackageManagerException { if (!mPackageName.equals(apk.packageName)) { @@ -1511,6 +1524,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } + @GuardedBy("mLock") private void dumpLocked(IndentingPrintWriter pw) { pw.println("Session " + sessionId + ":"); pw.increaseIndent(); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 2816bbd36b0bc..bc2a8a026cc25 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -797,6 +797,7 @@ public class PackageManagerService extends IPackageManager.Stub return overlayPackages; } + @GuardedBy("mInstallLock") final String[] getStaticOverlayPathsLocked(Collection allPackages, String targetPackageName, String targetPath) { if ("android".equals(targetPackageName)) { @@ -9015,6 +9016,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private void notifyPackageUseLocked(String packageName, int reason) { final PackageParser.Package p = mPackages.get(packageName); if (p == null) { @@ -13954,6 +13956,7 @@ public class PackageManagerService extends IPackageManager.Stub } } + @GuardedBy("mPackages") private boolean canSuspendPackageForUserLocked(String packageName, int userId) { if (isPackageDeviceAdmin(packageName, userId)) { Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index a85d6d8380451..034fd2390a8c6 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -530,6 +530,7 @@ public class ShortcutService extends IShortcutService.Stub { return processState <= PROCESS_STATE_FOREGROUND_THRESHOLD; } + @GuardedBy("mLock") boolean isUidForegroundLocked(int uid) { if (uid == Process.SYSTEM_UID) { // IUidObserver doesn't report the state of SYSTEM, but it always has bound services, @@ -545,6 +546,7 @@ public class ShortcutService extends IShortcutService.Stub { return isProcessStateForeground(mActivityManagerInternal.getUidProcessState(uid)); } + @GuardedBy("mLock") long getUidLastForegroundElapsedTimeLocked(int uid) { return mUidLastForegroundElapsedTime.get(uid); } @@ -638,6 +640,7 @@ public class ShortcutService extends IShortcutService.Stub { } } + @GuardedBy("mLock") private void unloadUserLocked(int userId) { if (DEBUG) { Slog.d(TAG, "unloadUserLocked: user=" + userId); @@ -864,6 +867,7 @@ public class ShortcutService extends IShortcutService.Stub { writeAttr(out, name, intent.toUri(/* flags =*/ 0)); } + @GuardedBy("mLock") @VisibleForTesting void saveBaseStateLocked() { final AtomicFile file = getBaseStateFile(); @@ -896,6 +900,7 @@ public class ShortcutService extends IShortcutService.Stub { } } + @GuardedBy("mLock") private void loadBaseStateLocked() { mRawLastResetTime = 0; @@ -948,6 +953,7 @@ public class ShortcutService extends IShortcutService.Stub { return new File(injectUserDataPath(userId), FILENAME_USER_PACKAGES); } + @GuardedBy("mLock") private void saveUserLocked(@UserIdInt int userId) { final File path = getUserFile(userId); if (DEBUG) { @@ -974,6 +980,7 @@ public class ShortcutService extends IShortcutService.Stub { } } + @GuardedBy("mLock") private void saveUserInternalLocked(@UserIdInt int userId, OutputStream os, boolean forBackup) throws IOException, XmlPullParserException { @@ -1107,12 +1114,14 @@ public class ShortcutService extends IShortcutService.Stub { } /** Return the last reset time. */ + @GuardedBy("mLock") long getLastResetTimeLocked() { updateTimesLocked(); return mRawLastResetTime; } /** Return the next reset time. */ + @GuardedBy("mLock") long getNextResetTimeLocked() { updateTimesLocked(); return mRawLastResetTime + mResetInterval; @@ -1125,6 +1134,7 @@ public class ShortcutService extends IShortcutService.Stub { /** * Update the last reset time. */ + @GuardedBy("mLock") private void updateTimesLocked() { final long now = injectCurrentTimeMillis(); @@ -1220,6 +1230,7 @@ public class ShortcutService extends IShortcutService.Stub { return ret; } + @GuardedBy("mLock") void forEachLoadedUserLocked(@NonNull Consumer c) { for (int i = mUsers.size() - 1; i >= 0; i--) { c.accept(mUsers.valueAt(i)); @@ -1279,6 +1290,7 @@ public class ShortcutService extends IShortcutService.Stub { * {@link ShortcutBitmapSaver#waitForAllSavesLocked()} to make sure there's no pending bitmap * saves are going on. */ + @GuardedBy("mLock") private void cleanupDanglingBitmapDirectoriesLocked(@UserIdInt int userId) { if (DEBUG) { Slog.d(TAG, "cleanupDanglingBitmaps: userId=" + userId); @@ -2108,6 +2120,7 @@ public class ShortcutService extends IShortcutService.Stub { } } + @GuardedBy("mLock") private ParceledListSlice getShortcutsWithQueryLocked(@NonNull String packageName, @UserIdInt int userId, int cloneFlags, @NonNull Predicate query) { @@ -2418,6 +2431,7 @@ public class ShortcutService extends IShortcutService.Stub { * * This is called when an app is uninstalled, or an app gets "clear data"ed. */ + @GuardedBy("mLock") @VisibleForTesting void cleanUpPackageLocked(String packageName, int owningUserId, int packageUserId, boolean appStillExists) { @@ -2508,6 +2522,7 @@ public class ShortcutService extends IShortcutService.Stub { return setReturnedByServer(ret); } + @GuardedBy("ShortcutService.this.mLock") private void getShortcutsInnerLocked(int launcherUserId, @NonNull String callingPackage, @Nullable String packageName, @Nullable List shortcutIds, long changedSince, @Nullable ComponentName componentName, int queryFlags, @@ -2579,6 +2594,7 @@ public class ShortcutService extends IShortcutService.Stub { } } + @GuardedBy("ShortcutService.this.mLock") private ShortcutInfo getShortcutInfoLocked( int launcherUserId, @NonNull String callingPackage, @NonNull String packageName, @NonNull String shortcutId, int userId, @@ -2940,6 +2956,7 @@ public class ShortcutService extends IShortcutService.Stub { verifyStates(); } + @GuardedBy("mLock") private void rescanUpdatedPackagesLocked(@UserIdInt int userId, long lastScanTime) { final ShortcutUser user = getUserShortcutsLocked(userId); diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index b53d83b1291ce..a0577b15736be 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1547,6 +1547,7 @@ public class UserManagerService extends IUserManager.Stub { return result; } + @GuardedBy("mRestrictionsLock") private EnforcingUser getEnforcingUserLocked(@UserIdInt int userId) { int source = mDeviceOwnerUserId == userId ? UserManager.RESTRICTION_SOURCE_DEVICE_OWNER : UserManager.RESTRICTION_SOURCE_PROFILE_OWNER; @@ -2896,6 +2897,7 @@ public class UserManagerService extends IUserManager.Stub { } } + @GuardedBy("mUsersLock") @VisibleForTesting void addRemovingUserIdLocked(int userId) { // We remember deleted user IDs to prevent them from being @@ -3405,6 +3407,7 @@ public class UserManagerService extends IUserManager.Stub { return nextId; } + @GuardedBy("mUsersLock") private int scanNextAvailableIdLocked() { for (int i = MIN_USER_ID; i < MAX_USER_ID; i++) { if (mUsers.indexOfKey(i) < 0 && !mRemovingUserIds.get(i)) { diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 08f8bbd20af6a..3f8a1e8a6af10 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1210,6 +1210,7 @@ Slog.e(TAG, "TODD: Packages: " + Arrays.toString(packages)); return false; } + @GuardedBy("mLock") private void grantRuntimePermissionsGrantedToDisabledPackageLocked( PackageParser.Package pkg, int callingUid, PermissionCallback callback) { if (pkg.parentPackage == null) { @@ -1499,6 +1500,7 @@ Slog.e(TAG, "TODD: Packages: " + Arrays.toString(packages)); } } + @GuardedBy("mLock") private int[] revokeUnusedSharedUserPermissionsLocked( SharedUserSetting suSetting, int[] allUserIds) { // Collect all used permissions in the UID diff --git a/services/core/java/com/android/server/pm/permission/PermissionSettings.java b/services/core/java/com/android/server/pm/permission/PermissionSettings.java index f6c4990c3294c..b3f2833a52f1f 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionSettings.java +++ b/services/core/java/com/android/server/pm/permission/PermissionSettings.java @@ -201,34 +201,42 @@ public class PermissionSettings { } } + @GuardedBy("mLock") @Nullable BasePermission getPermissionLocked(@NonNull String permName) { return mPermissions.get(permName); } + @GuardedBy("mLock") @Nullable BasePermission getPermissionTreeLocked(@NonNull String permName) { return mPermissionTrees.get(permName); } + @GuardedBy("mLock") void putPermissionLocked(@NonNull String permName, @NonNull BasePermission permission) { mPermissions.put(permName, permission); } + @GuardedBy("mLock") void putPermissionTreeLocked(@NonNull String permName, @NonNull BasePermission permission) { mPermissionTrees.put(permName, permission); } + @GuardedBy("mLock") void removePermissionLocked(@NonNull String permName) { mPermissions.remove(permName); } + @GuardedBy("mLock") void removePermissionTreeLocked(@NonNull String permName) { mPermissionTrees.remove(permName); } + @GuardedBy("mLock") @NonNull Collection getAllPermissionsLocked() { return mPermissions.values(); } + @GuardedBy("mLock") @NonNull Collection getAllPermissionTreesLocked() { return mPermissionTrees.values(); } diff --git a/services/core/java/com/android/server/power/BatterySaverPolicy.java b/services/core/java/com/android/server/power/BatterySaverPolicy.java index 847c90a08c5c1..08dc97e7dd638 100644 --- a/services/core/java/com/android/server/power/BatterySaverPolicy.java +++ b/services/core/java/com/android/server/power/BatterySaverPolicy.java @@ -306,6 +306,7 @@ public class BatterySaverPolicy extends ContentObserver { } } + @GuardedBy("mLock") @VisibleForTesting void updateConstantsLocked(final String setting, final String deviceSpecificSetting) { mSettings = setting; diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySavingStats.java b/services/core/java/com/android/server/power/batterysaver/BatterySavingStats.java index 671d7a67af1c1..37df94fee207e 100644 --- a/services/core/java/com/android/server/power/batterysaver/BatterySavingStats.java +++ b/services/core/java/com/android/server/power/batterysaver/BatterySavingStats.java @@ -285,6 +285,7 @@ public class BatterySavingStats { } } + @GuardedBy("mLock") private void transitionStateLocked(int newState) { if (mCurrentState == newState) { return; @@ -298,6 +299,7 @@ public class BatterySavingStats { mMetricsLoggerHelper.transitionState(newState, now, batteryLevel, batteryPercent); } + @GuardedBy("mLock") private void endLastStateLocked(long now, int batteryLevel, int batteryPercent) { if (mCurrentState < 0) { return; @@ -338,6 +340,7 @@ public class BatterySavingStats { } + @GuardedBy("mLock") private void startNewStateLocked(int newState, long now, int batteryLevel, int batteryPercent) { if (DEBUG) { Slog.d(TAG, "New state: " + stateToString(newState)); diff --git a/services/core/java/com/android/server/power/batterysaver/FileUpdater.java b/services/core/java/com/android/server/power/batterysaver/FileUpdater.java index e0ab9e93a8a68..c08b610ccd2d4 100644 --- a/services/core/java/com/android/server/power/batterysaver/FileUpdater.java +++ b/services/core/java/com/android/server/power/batterysaver/FileUpdater.java @@ -306,6 +306,7 @@ public class FileUpdater { } } + @GuardedBy("mLock") private void saveDefaultValuesLocked() { final AtomicFile file = new AtomicFile(injectDefaultValuesFilename()); @@ -334,6 +335,7 @@ public class FileUpdater { } } + @GuardedBy("mLock") @VisibleForTesting boolean loadDefaultValuesLocked() { final AtomicFile file = new AtomicFile(injectDefaultValuesFilename()); diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java index a87ae1e4d4a0a..e336ec331e68f 100644 --- a/services/core/java/com/android/server/stats/StatsCompanionService.java +++ b/services/core/java/com/android/server/stats/StatsCompanionService.java @@ -209,6 +209,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } // Assumes that sStatsdLock is held. + @GuardedBy("sStatsdLock") private final void informAllUidsLocked(Context context) throws RemoteException { UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); PackageManager pm = context.getPackageManager(); diff --git a/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java b/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java index dc62cc89c14dc..1b2f9542df11d 100644 --- a/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java +++ b/services/core/java/com/android/server/wm/SurfaceAnimationRunner.java @@ -151,6 +151,7 @@ class SurfaceAnimationRunner { } } + @GuardedBy("mLock") private void startPendingAnimationsLocked() { for (int i = mPendingAnimations.size() - 1; i >= 0; i--) { startAnimationLocked(mPendingAnimations.valueAt(i)); @@ -158,6 +159,7 @@ class SurfaceAnimationRunner { mPendingAnimations.clear(); } + @GuardedBy("mLock") private void startAnimationLocked(RunningAnimation a) { final ValueAnimator anim = mAnimatorFactory.makeAnimator(); diff --git a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java index 7b047a80d572d..621bee7d17e01 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotPersister.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotPersister.java @@ -281,11 +281,13 @@ class TaskSnapshotPersister { mSnapshot = snapshot; } + @GuardedBy("mLock") @Override void onQueuedLocked() { mStoreQueueItems.offer(this); } + @GuardedBy("mLock") @Override void onDequeuedLocked() { mStoreQueueItems.remove(this);