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); } }