-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
8329109: Threads::print_on() tries to print CPU time for terminated GC threads #18518
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 80 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 |
/label add hotspot-gc |
@reinrich |
Webrevs
|
It's If so, can the fix be placed in (I see that David made a similar remark in the bug report.) |
Ok. I'll wait a bit and shall close this pr if nobody thinks this approach should be taken. (Btw: |
I see. I notice that
|
A very simple alternative could be to check
It has |
Thread dump of minimal example with G1. |
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 like a good and simple fix, thanks ! The doc of NonJavaThread::Iterator says 'only live fully-initialized threads can be found in the list' and this is what we need here.
Universe::heap()->gc_threads_do(&cl); | ||
cl.do_thread(WatcherThread::watcher_thread()); | ||
cl.do_thread(AsyncLogWriter::instance()); | ||
non_java_threads_do(&cl); |
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.
This certainly looks neater and simpler and ensures all NJT's will be processed. There is additional synchronization involved in using the NonJavaThreads::Iterator
that I had to look closely at but I think it is safe to use in this context.
Thanks for the reviews. I think this is ready now... |
Going to push as commit c1cfb43.
Your commit was automatically rebased without conflicts. |
/backport jdk21u-dev |
@mmyxym the backport was successfully created on the branch backport-mmyxym-c1cfb43d in my personal fork of openjdk/jdk21u-dev. To create a pull request with this backport targeting openjdk/jdk21u-dev:master, 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/jdk21u-dev:
|
/backport jdk22u |
@mmyxym the backport was successfully created on the branch backport-mmyxym-c1cfb43d in my personal fork of openjdk/jdk22u. To create a pull request with this backport targeting openjdk/jdk22u:master, 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/jdk22u:
|
EDIT 2024-04-02: Use
Threads::non_java_threads_do(ThreadClosure* tc)
to print non-java threads (commit b2dabc9). It uses thread list iterators that synchronize with thread creation and termination. If a non-java thread is about to terminate, it waits for in progress iterations (see NonJavaThread::remove_from_the_list).Testing:
The output of a minimal example with G1 is almost identical (attached below). The order of non-java threads can differ.
The fix passed our CI testing: JTReg tests: tier1-4 of hotspot and jdk. All of Langtools and jaxp. JCK, SPECjvm2008, SPECjbb2015, Renaissance Suite, and SAP specific tests.
Testing was done with fastdebug builds on the main platforms and also on Linux/PPC64le.
Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/18518/head:pull/18518
$ git checkout pull/18518
Update a local copy of the PR:
$ git checkout pull/18518
$ git pull https://git.openjdk.org/jdk.git pull/18518/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 18518
View PR using the GUI difftool:
$ git pr show -t 18518
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/18518.diff
Webrev
Link to Webrev Comment