RFR: 8268368: Adopt cast notation for JavaThread conversions

David Holmes dholmes at openjdk.java.net
Tue Jun 22 02:02:28 UTC 2021


On Tue, 22 Jun 2021 01:11:30 GMT, Guoxiong Li <gli at openjdk.org> wrote:

> Hi all,
> 
> Considering the consistency of `JavaThread` and other threads, such as WorkerThread and CompilerThread, `JavaThread` could use a method named `cast` to replace the method `Thread::as_Java_thread()`. It can reduce the Thread's knowledge about the subtypes.
> 
> This patch removes two methods, `JavaThread* Thread::as_Java_thread()` and `const JavaThread* Thread::as_Java_thread() const`, of the class `Thread` and adds two static methods, `JavaThread* cast(Thread* t)` and `const JavaThread* cast(const Thread* t)`, to the class `JavaThread`. Correspondingly, the code of the method `JavaThread::current()` need to be adjusted and many places where the method `Thread::as_Java_thread()` is used need to use `JavaThread::cast` instead.
> 
> Test:
> tier1 passed locally.
> 
> Thanks for taking the time to review.
> 
> Best Regards,
> -- Guoxiong

Hi Guoxiong,

Thanks for picking up this enhancement request.

I wasn't sure if this would be worth the churn/disruption to the source code, but I think it is ok and preferable to use the cast notation.

The changes look good except for one mistake flagged below.

Note you need at least two reviewers before integrating this.

Thanks,
David

src/hotspot/share/gc/z/zFuture.inline.hpp line 49:

> 47:   // Wait for notification
> 48:   Thread* const thread = Thread::current();
> 49:   if (JavaThread::cast(thread)) {

This is wrong - we still need the is_Java_thread() query; and cast is not a boolean operator.

-------------

Changes requested by dholmes (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/4546


More information about the serviceability-dev mailing list