RFR: JDK-8214097: Rework thread initialization and teardown logic
Markus Gronlund
markus.gronlund at oracle.com
Thu Dec 20 15:07:40 UTC 2018
Thanks David for doing this work.
Looks good.
"
- Moved the JavaThread call to this->exit(false); from the end of thread_main_inner to the start of post_run - as Markus suggested. This also necessitated a change to the gtest logic compared to the original as it has to override post_run() now to avoid the exit call."
Just so that I understand the reason for the updates to the gtest part:
The reason you need to add a post_run() specialization in threadHelper.inline.hpp, is because the JavaThread::post_run() now invokes JavaThread::exit() (thanks for accommodating that btw), and JavaThread::exit() expects the thread to have a valid thread oop, something that the gtests do not setup/create?
JavaThread::exit() contains assertions like:
...
assert(threadObj.not_null(), "Java thread object should be created");
Nit:
Maybe the comment in threadHelper.inline.hpp:
// override as JavaThread::post_run() calls Thread::exit
Could become
// override as JavaThread::post_run() calls JavaThread::exit() which expect a valid thread object oop
Thanks
Markus
-----Original Message-----
From: David Holmes
Sent: den 19 december 2018 22:22
To: hotspot-dev developers <hotspot-dev at openjdk.java.net>; KIM.BARRETT <kim.barrett at oracle.com>; Markus Grönlund <markus.gronlund at oracle.com>
Subject: RFR: JDK-8214097: Rework thread initialization and teardown logic
Following on from the preliminary RFR:
http://mail.openjdk.java.net/pipermail/hotspot-dev/2018-December/035737.html
I've merged with Kim's changes from 8215097.
Bug: https://bugs.openjdk.java.net/browse/JDK-8214097
Webrev: http://cr.openjdk.java.net/~dholmes/8214097/webrev.v2/
Changes since previous discussion:
- Replaced Kim's initial_thread_created assertion with a check of Thread::current_or_null, with an explanation
- Removed NJT list addition at construction time as it's not needed after 8215097.
- Moved the JavaThread call to this->exit(false); from the end of thread_main_inner to the start of post_run - as Markus suggested. This also necessitated a change to the gtest logic compared to the original as it has to override post_run() now to avoid the exit call.
- Made get_thread_name_string virtual so that the JavaThread subclasses in the gtest can override it and allow their names to be seen in hs_err files. (Makes debugging so much easier when you know which thread crashed!).
Testing:
- Mach 5 tiers 1 - 3
- All runtime tests with:
- default GC
- ZGC
- Shenandoah GC
- gc/g1
- gc/serial
- gc/epsilon
- gc/shenandoah
Thanks,
David
More information about the hotspot-dev
mailing list