Skip to content

Commit 4fecefe

Browse files
aclementwilkinsona
authored andcommitted
Add Graal checks ahead of some interactions with ClassLoader methods
See gh-18262
1 parent b15e427 commit 4fecefe

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatEmbeddedWebappClassLoader.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.catalina.loader.ParallelWebappClassLoader;
2525
import org.apache.commons.logging.Log;
2626
import org.apache.commons.logging.LogFactory;
27+
import org.apache.tomcat.util.compat.JreCompat;
2728

2829
/**
2930
* Extension of Tomcat's {@link ParallelWebappClassLoader} that does not consider the
@@ -32,14 +33,17 @@
3233
* executable archives).
3334
*
3435
* @author Phillip Webb
36+
* @author Andy Clement
3537
* @since 2.0.0
3638
*/
3739
public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader {
3840

3941
private static final Log logger = LogFactory.getLog(TomcatEmbeddedWebappClassLoader.class);
4042

4143
static {
42-
ClassLoader.registerAsParallelCapable();
44+
if (!JreCompat.isGraalAvailable()) {
45+
ClassLoader.registerAsParallelCapable();
46+
}
4347
}
4448

4549
public TomcatEmbeddedWebappClassLoader() {
@@ -61,7 +65,7 @@ public Enumeration<URL> findResources(String name) throws IOException {
6165

6266
@Override
6367
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
64-
synchronized (getClassLoadingLock(name)) {
68+
synchronized (JreCompat.isGraalAvailable() ? this : getClassLoadingLock(name)) {
6569
Class<?> result = findExistingLoadedClass(name);
6670
result = (result != null) ? result : doLoadClass(name);
6771
if (result == null) {
@@ -73,7 +77,7 @@ public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundExce
7377

7478
private Class<?> findExistingLoadedClass(String name) {
7579
Class<?> resultClass = findLoadedClass0(name);
76-
resultClass = (resultClass != null) ? resultClass : findLoadedClass(name);
80+
resultClass = (resultClass != null || JreCompat.isGraalAvailable()) ? resultClass : findLoadedClass(name);
7781
return resultClass;
7882
}
7983

0 commit comments

Comments
 (0)