Fix ConcurrentModificationException in SliceBackgroundWorker

- Two different threads could call SliceBackgroundWorker.getInstance()
  at the same time and caused ConcurrentModificationException
- Add a new API overloading getInstance for each slice to get a nullable
  worker since there is no result data then
- Only slice provider can create a new worker instance in main thread

Test: robotest
Change-Id: I560529bb6034ec22263418adeb7f3ccebf879196
Fixes: 121043385
This commit is contained in:
Jason Chiu
2019-01-04 15:12:19 +08:00
parent 6be224a919
commit e19658ac36
3 changed files with 19 additions and 9 deletions

View File

@@ -105,8 +105,8 @@ public class WifiSlice implements CustomSliceable {
return listBuilder.build();
}
final List<AccessPoint> results =
SliceBackgroundWorker.getInstance(mContext, this).getResults();
final SliceBackgroundWorker worker = SliceBackgroundWorker.getInstance(getUri());
final List<AccessPoint> results = worker != null ? worker.getResults() : null;
// Need a loading text when results are not ready.
boolean needLoadingRow = results == null;