Version 2.0.95
This is not a cherry pick since this class is no longer available on
master.
Make iteration of directSubtypes thread safe
If we are synthesizing a class and adding it while iterating
the directSubtypes collection we might mutate the collection
concurrently.
Bug: 160769273
Change-Id: I97f1021747b7466df979ad624e38684c3d949aa2
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index fb20787..76ee625 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
- public static final String LABEL = "2.0.94";
+ public static final String LABEL = "2.0.95";
private Version() {
}
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java b/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java
index a24212f..1ef8bf7 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfoWithSubtyping.java
@@ -21,8 +21,8 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentSkipListSet;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -60,7 +60,7 @@
private void ensureDirectSubTypeSet() {
if (directSubtypes == NO_DIRECT_SUBTYPE) {
- directSubtypes = new TreeSet<>(DexType::slowCompareTo);
+ directSubtypes = new ConcurrentSkipListSet<>(DexType::slowCompareTo);
}
}