Commit 4fecefe1 authored by Andy Clement's avatar Andy Clement Committed by Andy Wilkinson

Add Graal checks ahead of some interactions with ClassLoader methods

See gh-18262
parent b15e427a
...@@ -24,6 +24,7 @@ import java.util.Enumeration; ...@@ -24,6 +24,7 @@ import java.util.Enumeration;
import org.apache.catalina.loader.ParallelWebappClassLoader; import org.apache.catalina.loader.ParallelWebappClassLoader;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.util.compat.JreCompat;
/** /**
* Extension of Tomcat's {@link ParallelWebappClassLoader} that does not consider the * Extension of Tomcat's {@link ParallelWebappClassLoader} that does not consider the
...@@ -32,6 +33,7 @@ import org.apache.commons.logging.LogFactory; ...@@ -32,6 +33,7 @@ import org.apache.commons.logging.LogFactory;
* executable archives). * executable archives).
* *
* @author Phillip Webb * @author Phillip Webb
* @author Andy Clement
* @since 2.0.0 * @since 2.0.0
*/ */
public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader { public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader {
...@@ -39,7 +41,9 @@ public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader { ...@@ -39,7 +41,9 @@ public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader {
private static final Log logger = LogFactory.getLog(TomcatEmbeddedWebappClassLoader.class); private static final Log logger = LogFactory.getLog(TomcatEmbeddedWebappClassLoader.class);
static { static {
ClassLoader.registerAsParallelCapable(); if (!JreCompat.isGraalAvailable()) {
ClassLoader.registerAsParallelCapable();
}
} }
public TomcatEmbeddedWebappClassLoader() { public TomcatEmbeddedWebappClassLoader() {
...@@ -61,7 +65,7 @@ public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader { ...@@ -61,7 +65,7 @@ public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader {
@Override @Override
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
synchronized (getClassLoadingLock(name)) { synchronized (JreCompat.isGraalAvailable() ? this : getClassLoadingLock(name)) {
Class<?> result = findExistingLoadedClass(name); Class<?> result = findExistingLoadedClass(name);
result = (result != null) ? result : doLoadClass(name); result = (result != null) ? result : doLoadClass(name);
if (result == null) { if (result == null) {
...@@ -73,7 +77,7 @@ public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader { ...@@ -73,7 +77,7 @@ public class TomcatEmbeddedWebappClassLoader extends ParallelWebappClassLoader {
private Class<?> findExistingLoadedClass(String name) { private Class<?> findExistingLoadedClass(String name) {
Class<?> resultClass = findLoadedClass0(name); Class<?> resultClass = findLoadedClass0(name);
resultClass = (resultClass != null) ? resultClass : findLoadedClass(name); resultClass = (resultClass != null || JreCompat.isGraalAvailable()) ? resultClass : findLoadedClass(name);
return resultClass; return resultClass;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment