8357910: LoaderConstraintsTest.java fails when run with TEST_THREAD_FACTORY=Virtual

Reviewed-by: dholmes, coleenp
This commit is contained in:
Patricio Chilano Mateo 2025-06-03 16:12:53 +00:00
parent d7def20afa
commit 16e120b008
2 changed files with 10 additions and 8 deletions

View File

@ -92,7 +92,6 @@ gc/arguments/TestNewSizeThreadIncrease.java 0000000 generic-all
gc/g1/TestSkipRebuildRemsetPhase.java 0000000 generic-all
runtime/classFileParserBug/TestEmptyBootstrapMethodsAttr.java 8346442 generic-all
runtime/ErrorHandling/MachCodeFramesInErrorFile.java 0000000 generic-all
runtime/logging/LoaderConstraintsTest.java 8346442 generic-all
runtime/Thread/AsyncExceptionOnMonitorEnter.java 0000000 generic-all
runtime/Thread/StopAtExit.java 0000000 generic-all
runtime/handshake/HandshakeWalkStackTest.java 0000000 generic-all

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -38,6 +38,7 @@ import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -49,22 +50,25 @@ public class LoaderConstraintsTest {
private static ProcessBuilder pb;
private static class ClassUnloadTestMain {
public static void main(String... args) throws Exception {
String className = "test.Empty";
ClassLoader cl = ClassUnloadCommon.newClassLoader();
Class<?> c = cl.loadClass(className);
cl = null; c = null;
ClassUnloadCommon.triggerUnloading();
Class<?> c = cl.loadClass("test.Empty");
// Causes class test.Empty to be linked, which triggers the
// constraint on class String due to override of toString().
Constructor<?> constructor = c.getDeclaredConstructor();
}
}
// Use the same command-line heap size setting as ../ClassUnload/UnloadTest.java
static ProcessBuilder exec(String... args) throws Exception {
String classPath = System.getProperty("test.class.path", ".");
List<String> argsList = new ArrayList<>();
Collections.addAll(argsList, args);
Collections.addAll(argsList, "-Xmn8m");
Collections.addAll(argsList, "-Xbootclasspath/a:.");
Collections.addAll(argsList, "-XX:+UnlockDiagnosticVMOptions");
Collections.addAll(argsList, "-XX:+WhiteBoxAPI");
Collections.addAll(argsList, "-Dtest.class.path=" + classPath);
Collections.addAll(argsList, ClassUnloadTestMain.class.getName());
return ProcessTools.createLimitedTestJavaProcessBuilder(argsList);
}
@ -75,13 +79,12 @@ public class LoaderConstraintsTest {
pb = exec("-Xlog:class+loader+constraints=info");
out = new OutputAnalyzer(pb.start());
out.shouldHaveExitValue(0);
out.shouldContain("[class,loader,constraints] adding new constraint for name: java/lang/Class, loader[0]: 'app', loader[1]: 'bootstrap'");
out.stdoutShouldMatch("\\[class,loader,constraints\\] adding new constraint for name: java/lang/String, loader\\[0\\]: 'ClassUnloadCommonClassLoader' @[\\da-f]+, loader\\[1\\]: 'bootstrap'");
// -Xlog:class+loader+constraints=off
pb = exec("-Xlog:class+loader+constraints=off");
out = new OutputAnalyzer(pb.start());
out.shouldHaveExitValue(0);
out.shouldNotContain("[class,loader,constraints]");
}
}