diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentLoader.java b/packages/DocumentsUI/src/com/android/documentsui/RecentLoader.java index c2b64fb4317e0..4bd6ae669e77b 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RecentLoader.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RecentLoader.java @@ -36,7 +36,7 @@ import android.text.format.DateUtils; import android.util.Log; import com.android.documentsui.model.RootInfo; - +import com.android.internal.annotations.GuardedBy; import com.google.common.util.concurrent.AbstractFuture; import libcore.io.IoUtils; @@ -79,6 +79,7 @@ public class RecentLoader extends AsyncTaskLoader { private final RootsCache mRoots; private final State mState; + @GuardedBy("mTasks") private final HashMap mTasks = new HashMap<>(); private final int mSortOrder = State.SORT_ORDER_LAST_MODIFIED; @@ -165,6 +166,12 @@ public class RecentLoader extends AsyncTaskLoader { @Override public DirectoryResult loadInBackground() { + synchronized (mTasks) { + return loadInBackgroundLocked(); + } + } + + private DirectoryResult loadInBackgroundLocked() { if (mFirstPassLatch == null) { // First time through we kick off all the recent tasks, and wait // around to see if everyone finishes quickly. @@ -302,8 +309,10 @@ public class RecentLoader extends AsyncTaskLoader { // Ensure the loader is stopped onStopLoading(); - for (RecentTask task : mTasks.values()) { - IoUtils.closeQuietly(task); + synchronized (mTasks) { + for (RecentTask task : mTasks.values()) { + IoUtils.closeQuietly(task); + } } IoUtils.closeQuietly(mResult);