Fix a ConcurrentModificationException when dumping resources

Since the sResourcesHistory set is synchronized, an attemp to modify the
set will block while the forEach() method is running in the rare case
resources are being dumped. With a normal for loop, modifying the set
while in the loop results in a ConcurrentModificationException.

Fixes: 219609463
Test: Manual
Change-Id: I9b7bb965aa390e5dec696be07599f777c807c1e3
This commit is contained in:
Jeremy Meyer
2022-02-28 22:35:37 +00:00
parent 4b9e5c8811
commit b21e7cee30

View File

@@ -2674,9 +2674,8 @@ public class Resources {
// Putting into a map keyed on the apk assets to deduplicate resources that are different
// objects but ultimately represent the same assets
Map<List<ApkAssets>, Resources> history = new ArrayMap<>();
for (Resources r : sResourcesHistory) {
history.put(Arrays.asList(r.mResourcesImpl.mAssets.getApkAssets()), r);
}
sResourcesHistory.forEach(
r -> history.put(Arrays.asList(r.mResourcesImpl.mAssets.getApkAssets()), r));
int i = 0;
for (Resources r : history.values()) {
if (r != null) {