diff --git a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ByteCodeLoader.java b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ByteCodeLoader.java index 46309eae0ca..a79bd740622 100644 --- a/hotspot/test/testlibrary/com/oracle/java/testlibrary/ByteCodeLoader.java +++ b/hotspot/test/testlibrary/com/oracle/java/testlibrary/ByteCodeLoader.java @@ -37,6 +37,7 @@ import java.security.SecureClassLoader; public class ByteCodeLoader extends SecureClassLoader { private final String className; private final byte[] byteCode; + private volatile Class holder; /** * Creates a new {@code ByteCodeLoader} ready to load a class with the @@ -50,6 +51,21 @@ public class ByteCodeLoader extends SecureClassLoader { this.byteCode = byteCode; } + @Override + public Class loadClass(String name) throws ClassNotFoundException { + if (!name.equals(className)) { + return super.loadClass(name); + } + if (holder == null) { + synchronized(this) { + if (holder == null) { + holder = findClass(name); + } + } + } + return holder; + } + @Override protected Class findClass(String name) throws ClassNotFoundException { if (!name.equals(className)) {