Skip to content

Commit a58f7a2

Browse files
ianlevesquespullara
authored andcommitted
Make ClasspathResolver thread-safe
We run mustache with huge parallelism in buck2 and as described in https://issuetracker.google.com/issues/137929327 and https://bugs.openjdk.java.net/browse/JDK-8205976 using getResourceAsStream can sometimes be not thread-safe, such as when used with URLClassLoader. This applies the suggested workaround, which resolves the issue.
1 parent 2342f36 commit a58f7a2

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

compiler/src/main/java/com/github/mustachejava/resolver/ClasspathResolver.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22

33
import com.github.mustachejava.MustacheResolver;
44

5-
import java.io.BufferedReader;
6-
import java.io.File;
7-
import java.io.InputStream;
8-
import java.io.InputStreamReader;
9-
import java.io.Reader;
5+
import java.io.*;
106
import java.net.URI;
117
import java.net.URL;
128
import java.nio.charset.StandardCharsets;
@@ -54,14 +50,15 @@ public Reader getReader(String resourceName) {
5450
return null;
5551
}
5652
}
57-
InputStream is = ccl.getResourceAsStream(normalizeResourceName);
58-
if (is == null) {
59-
ClassLoader classLoader = ClasspathResolver.class.getClassLoader();
60-
is = classLoader.getResourceAsStream(normalizeResourceName);
61-
}
53+
else
54+
resource = ClasspathResolver.class.getClassLoader().getResource(normalizeResourceName);
6255

63-
if (is != null) {
64-
return new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
56+
if (resource != null) {
57+
try {
58+
return new BufferedReader(new InputStreamReader(resource.openStream(), StandardCharsets.UTF_8));
59+
} catch (IOException e) {
60+
return null;
61+
}
6562
} else {
6663
return null;
6764
}

0 commit comments

Comments
 (0)