-
Notifications
You must be signed in to change notification settings - Fork 6.1k
8361602: [TESTBUG] serviceability/HeapDump/UnmountedVThreadNativeMethodAtTop.java deadlocks on exception #26213
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
👋 Welcome back rrich! A progress list of the required criteria for merging this PR into |
@reinrich This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 41 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. ➡️ To integrate this PR with the above commit message to the |
Webrevs
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems you need to adjust the COPYRIGHT too, but otherwise looks good.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, modulo copyright year. 😄
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That fixes the observed problem, but I find the existing test logic somewhat awkward. You only need a finally block to ensure something happens if an exception occurred - but here if you get an exception why do we care about joining the vthread? We don't know what the exception was or what it implies about the state of the vthread.
Also using wait/notify without a loop on the wait and checking a state variable is not the correct usage pattern and would be affected by spurious wakeups.
The test should notify(). Without the virtual thread will not terminate and stay there until the vm exits. This would influence (new) test cases as heap dumps would accumulate virtual threads from previous tests. Btw this is another reason to call System.gc() before every test for fixing https://bugs.openjdk.org/browse/JDK-8361827 join() is helpful to find issues like the observed problem and to make sure the virtual thread's gone.
I've added the loop. |
With your fix in place, I assume now if verifyHeapDump() throws an exception the test will still fail, but in a more timely and meaningful manner. Why is verifyHeapDump() throwing an exception in the first place. Is that something that still needs to be addressed? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for update.
Still not sure that forcing the join is necessarily desirable if there is an unexpected exception, but ...
@@ -47,6 +47,8 @@ | |||
|
|||
public class UnmountedVThreadNativeMethodAtTop { | |||
|
|||
public boolean done; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should not be public
Yes, that's the intention.
In our local ci testing it throws OOM (even reproducibly on one machine). This is addressed with https://bugs.openjdk.org/browse/JDK-8361827. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good.
Thanks for the reviews. |
Going to push as commit 917d018.
Your commit was automatically rebased without conflicts. |
/backport :jdk25 |
@reinrich the backport was successfully created on the branch backport-reinrich-917d0182-jdk25 in my personal fork of openjdk/jdk. To create a pull request with this backport targeting openjdk/jdk:jdk25, just click the following link: The title of the pull request is automatically filled in correctly and below you find a suggestion for the pull request body:
If you need to update the source branch of the pull then run the following commands in a local clone of your personal fork of openjdk/jdk:
|
This pr moves the
notify()
call to the finally block to avoid the deadlock injoin()
ifverifyHeapDump(dumpFile)
throws an exception.Testing was done with fastdebug and release builds on the main platforms and also on Linux/PPC64le and AIX.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/26213/head:pull/26213
$ git checkout pull/26213
Update a local copy of the PR:
$ git checkout pull/26213
$ git pull https://git.openjdk.org/jdk.git pull/26213/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 26213
View PR using the GUI difftool:
$ git pr show -t 26213
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/26213.diff
Using Webrev
Link to Webrev Comment