From 94a301a70e19be284f406ebb6d8b94b6f96e1a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20H=C3=A4ssig?= Date: Fri, 19 Sep 2025 09:08:29 +0000 Subject: [PATCH] 8366875: CompileTaskTimeout should be reset for each iteration of RepeatCompilation Reviewed-by: dlong, epeter --- src/hotspot/os/linux/compilerThreadTimeout_linux.hpp | 4 ++++ src/hotspot/share/compiler/compileBroker.cpp | 1 + src/hotspot/share/compiler/compilerThread.hpp | 1 + .../compiler/arguments/TestCompileTaskTimeout.java | 12 +++++++++++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/hotspot/os/linux/compilerThreadTimeout_linux.hpp b/src/hotspot/os/linux/compilerThreadTimeout_linux.hpp index 2dc6fa7b9c9..7c27080eb5e 100644 --- a/src/hotspot/os/linux/compilerThreadTimeout_linux.hpp +++ b/src/hotspot/os/linux/compilerThreadTimeout_linux.hpp @@ -46,6 +46,10 @@ class CompilerThreadTimeoutLinux : public CHeapObj { bool init_timeout(); void arm(); void disarm(); + void reset() { + disarm(); + arm(); + }; }; #endif //LINUX_COMPILER_THREAD_TIMEOUT_LINUX_HPP diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp index 24f28821087..226a6d3ad5c 100644 --- a/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp @@ -2349,6 +2349,7 @@ void CompileBroker::invoke_compiler_on_method(CompileTask* task) { while (repeat_compilation_count > 0) { ResourceMark rm(thread); task->print_ul("NO CODE INSTALLED"); + thread->timeout()->reset(); comp->compile_method(&ci_env, target, osr_bci, false, directive); repeat_compilation_count--; } diff --git a/src/hotspot/share/compiler/compilerThread.hpp b/src/hotspot/share/compiler/compilerThread.hpp index e4641780a12..e5b14560872 100644 --- a/src/hotspot/share/compiler/compilerThread.hpp +++ b/src/hotspot/share/compiler/compilerThread.hpp @@ -51,6 +51,7 @@ class CompilerThreadTimeoutGeneric : public CHeapObj { CompilerThreadTimeoutGeneric() {}; void arm() {}; void disarm() {}; + void reset() {}; bool init_timeout() { return true; }; }; #endif // !LINUX diff --git a/test/hotspot/jtreg/compiler/arguments/TestCompileTaskTimeout.java b/test/hotspot/jtreg/compiler/arguments/TestCompileTaskTimeout.java index f19223e6dce..9ec3beb0d89 100644 --- a/test/hotspot/jtreg/compiler/arguments/TestCompileTaskTimeout.java +++ b/test/hotspot/jtreg/compiler/arguments/TestCompileTaskTimeout.java @@ -25,7 +25,7 @@ package compiler.arguments; /* * @test TestCompileTaskTimeout - * @bug 8308094 8365909 + * @bug 8308094 8365909 8366875 * @requires vm.debug & vm.flagless & os.name == "Linux" * @summary Check functionality of CompileTaskTimeout * @library /test/lib @@ -42,6 +42,7 @@ public class TestCompileTaskTimeout { timeoutFactor = Double.parseDouble(System.getProperty("test.timeout.factor", "1.0")); } catch (NumberFormatException ignored) {} + // Short timeouts crash the VM. ProcessTools.executeTestJava("-Xcomp", "-XX:CompileTaskTimeout=1", "--version") .shouldHaveExitValue(134) .shouldContain("timed out after"); @@ -54,8 +55,17 @@ public class TestCompileTaskTimeout { .shouldHaveExitValue(134) .shouldContain("timed out after"); + // A long enough timeout succeeds. int timeout = (int)(500.0 * timeoutFactor); ProcessTools.executeTestJava("-Xcomp", "-XX:CompileTaskTimeout=" + timeout, "--version") .shouldHaveExitValue(0); + + // Each repeated compilation has a new timeout. + ProcessTools.executeTestJava("-Xcomp", + "-XX:CompileTaskTimeout=" + timeout, + "-XX:RepeatCompilation=100", + "-XX:CompileCommand=compileonly,java/util/concurrent/ConcurrentHashMap.*", + "--version") + .shouldHaveExitValue(0); } }