RFR: JDK-8214097: Rework thread initialization and teardown logic
David Holmes
david.holmes at oracle.com
Fri Dec 21 02:48:09 UTC 2018
Hi Markus,
On 21/12/2018 1:07 am, Markus Gronlund wrote:
> Thanks David for doing this work.
>
> Looks good.
Thanks for looking at this.
> "
> - 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");
That's correct. And without a Thread oop, and being a real Java thread,
little else in JavaThread::exit makes any sense.
> 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
Sure. The Thread::exit rather than JavaThread::exit was a typo.
Thanks,
David
> 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