Insert missing barrier in ApplicationWriter.
Bug: 66327890
Change-Id: I772839d8a2cd06f693200247904a98d3ac596eee
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 972c988..752c66b 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -4,7 +4,6 @@
package com.android.tools.r8.dex;
import com.android.tools.r8.ApiLevelException;
-import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.DexOverflowException;
import com.android.tools.r8.graph.AppInfo;
import com.android.tools.r8.graph.DexAnnotation;
@@ -27,6 +26,7 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.OutputMode;
+import com.android.tools.r8.utils.ThreadUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
@@ -169,6 +169,10 @@
}
}
+ // Wait for all spawned futures to terminate to ensure jumbo string writing is complete.
+ // TODO(66327890): Implement a test for this.
+ ThreadUtils.awaitFutures(offsetMappingFutures.values());
+
// Generate the dex file contents.
LinkedHashMap<VirtualFile, Future<byte[]>> dexDataFutures = new LinkedHashMap<>();
for (VirtualFile newFile : offsetMappingFutures.keySet()) {
diff --git a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
index 06a87aa..0eaf1ad 100644
--- a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.utils;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -12,7 +13,7 @@
public class ThreadUtils {
- public static <T> List<T> awaitFutures(List<? extends Future<? extends T>> futures)
+ public static <T> List<T> awaitFutures(Collection<? extends Future<? extends T>> futures)
throws ExecutionException {
ArrayList<T> result = new ArrayList<>(futures.size());
for (Future<? extends T> f : futures) {