Fix bad locking.
When synchronizing on a field, it should be final to avoid locking on different
objects.
Missing synchronization on use of mRunning caught by Error Prone's @GuardedBy
checker.
Bug: 27723540
Change-Id: I9d7c9e37f8ef5f7f49707bfdf607a6b73b9654d8
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java b/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java
index 871e135..5b2394e 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/services/FileOperationService.java
@@ -95,7 +95,7 @@
private NotificationManager mNotificationManager;
@GuardedBy("mRunning")
- private Map<String, JobRecord> mRunning = new HashMap<>();
+ private final Map<String, JobRecord> mRunning = new HashMap<>();
private int mLastServiceId;
@@ -176,7 +176,9 @@
if (DEBUG) Log.d(
TAG, "Scheduling job " + job.id + " to run in " + delay + " milliseconds.");
ScheduledFuture<?> future = executor.schedule(job, delay, TimeUnit.MILLISECONDS);
- mRunning.put(jobId, new JobRecord(job, future));
+ synchronized (mRunning) {
+ mRunning.put(jobId, new JobRecord(job, future));
+ }
}
/**