Merge "Handle object in thread-safe manner." into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-09-22 17:47:53 +00:00
committed by Android (Google) Code Review

View File

@@ -221,6 +221,7 @@ public class UsageStatsService extends SystemService implements
final SparseArray<ActivityData> mVisibleActivities = new SparseArray(); final SparseArray<ActivityData> mVisibleActivities = new SparseArray();
@GuardedBy("mLock") @GuardedBy("mLock")
private final SparseArray<LaunchTimeAlarmQueue> mLaunchTimeAlarmQueues = new SparseArray<>(); private final SparseArray<LaunchTimeAlarmQueue> mLaunchTimeAlarmQueues = new SparseArray<>();
@GuardedBy("mUsageEventListeners") // Don't hold the main lock when calling out
private final ArraySet<UsageStatsManagerInternal.UsageEventListener> mUsageEventListeners = private final ArraySet<UsageStatsManagerInternal.UsageEventListener> mUsageEventListeners =
new ArraySet<>(); new ArraySet<>();
private final CopyOnWriteArraySet<UsageStatsManagerInternal.EstimatedLaunchTimeChangedListener> private final CopyOnWriteArraySet<UsageStatsManagerInternal.EstimatedLaunchTimeChangedListener>
@@ -1168,9 +1169,11 @@ public class UsageStatsService extends SystemService implements
service.reportEvent(event); service.reportEvent(event);
} }
final int size = mUsageEventListeners.size(); synchronized (mUsageEventListeners) {
for (int i = 0; i < size; ++i) { final int size = mUsageEventListeners.size();
mUsageEventListeners.valueAt(i).onUsageEvent(userId, event); for (int i = 0; i < size; ++i) {
mUsageEventListeners.valueAt(i).onUsageEvent(userId, event);
}
} }
} }
@@ -1661,7 +1664,7 @@ public class UsageStatsService extends SystemService implements
* Called via the local interface. * Called via the local interface.
*/ */
private void registerListener(@NonNull UsageStatsManagerInternal.UsageEventListener listener) { private void registerListener(@NonNull UsageStatsManagerInternal.UsageEventListener listener) {
synchronized (mLock) { synchronized (mUsageEventListeners) {
mUsageEventListeners.add(listener); mUsageEventListeners.add(listener);
} }
} }
@@ -1671,7 +1674,7 @@ public class UsageStatsService extends SystemService implements
*/ */
private void unregisterListener( private void unregisterListener(
@NonNull UsageStatsManagerInternal.UsageEventListener listener) { @NonNull UsageStatsManagerInternal.UsageEventListener listener) {
synchronized (mLock) { synchronized (mUsageEventListeners) {
mUsageEventListeners.remove(listener); mUsageEventListeners.remove(listener);
} }
} }