From e802fe62ec7334e30b940f7d7e48f8f962db4325 Mon Sep 17 00:00:00 2001 From: Richard Reingruber Date: Wed, 9 Jul 2025 09:31:49 +0200 Subject: [PATCH 1/5] Notify in finally block to avoid deadlock reaching there by exception --- .../HeapDump/UnmountedVThreadNativeMethodAtTop.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java index 62dfd6f8a79bb..1338c04b83491 100644 --- a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java +++ b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java @@ -109,11 +109,10 @@ void VThreadBlockedAtOjectWait() throws Exception { Path dumpFile = dumpHeap(); verifyHeapDump(dumpFile); - + } finally { synchronized (lock) { lock.notify(); } - } finally { vthread.join(); } } From a49433450ad07f40367a48c2e3632432e0231111 Mon Sep 17 00:00:00 2001 From: Richard Reingruber Date: Thu, 10 Jul 2025 10:06:57 +0200 Subject: [PATCH 2/5] Copyright --- .../HeapDump/UnmountedVThreadNativeMethodAtTop.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java index 1338c04b83491..0e43159d10a68 100644 --- a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java +++ b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, 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 From 13cb9ba37e18091c0414136d320f0b0d3a4407d0 Mon Sep 17 00:00:00 2001 From: Richard Reingruber Date: Thu, 10 Jul 2025 11:43:24 +0200 Subject: [PATCH 3/5] Wait while !done --- .../HeapDump/UnmountedVThreadNativeMethodAtTop.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java index 0e43159d10a68..a21243d8639de 100644 --- a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java +++ b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java @@ -47,6 +47,8 @@ public class UnmountedVThreadNativeMethodAtTop { + public boolean done; + /** * Test dumping the heap while a virtual thread is blocked entering a synchronized native method. */ @@ -96,7 +98,9 @@ void VThreadBlockedAtOjectWait() throws Exception { started.countDown(); try { synchronized (lock) { - lock.wait(); + while (!done) { + lock.wait(); + } } } catch (InterruptedException e) { } }); @@ -111,6 +115,7 @@ void VThreadBlockedAtOjectWait() throws Exception { verifyHeapDump(dumpFile); } finally { synchronized (lock) { + done = true; lock.notify(); } vthread.join(); From 5b77c612ae131f78cbc30e70e51f3402ddf5dc37 Mon Sep 17 00:00:00 2001 From: Richard Reingruber Date: Fri, 11 Jul 2025 09:16:54 +0200 Subject: [PATCH 4/5] `done` shouldn't be public --- .../HeapDump/UnmountedVThreadNativeMethodAtTop.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java index a21243d8639de..ae4e042f7a211 100644 --- a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java +++ b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java @@ -47,7 +47,7 @@ public class UnmountedVThreadNativeMethodAtTop { - public boolean done; + boolean done; /** * Test dumping the heap while a virtual thread is blocked entering a synchronized native method. From c2ae5b24af0b1b04e1c0f19b2494d902271e2713 Mon Sep 17 00:00:00 2001 From: Richard Reingruber Date: Fri, 11 Jul 2025 09:17:10 +0200 Subject: [PATCH 5/5] Last line is incomplete (acc. to POSIX). Add newline. --- .../HeapDump/UnmountedVThreadNativeMethodAtTop.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java index ae4e042f7a211..2e3925a5ca7b7 100644 --- a/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java +++ b/test/hotspot/jtreg/serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java @@ -163,4 +163,4 @@ private void await(Thread thread, Thread.State expectedState) throws Interrupted static { System.loadLibrary("UnmountedVThreadNativeMethodAtTop"); } -} \ No newline at end of file +}