RFR: 8305425: Thread.isAlive0 doesn't need to call into the VM [v2]
David Holmes
david.holmes at oracle.com
Mon Apr 3 12:59:57 UTC 2023
On 3/04/2023 9:27 pm, Simon Roberts wrote:
> Agreed, I believe there should be an hb relationship with this, if the
> target is not alive.
You are both right - I did not recall the hb relationship between the
last action of a thread and a call to isAlive that returns false. The
existing code does not explicitly have it. In practice it was likely
implicitly there due to the native call and VM thread state transitions
but I'm not so sure.
Making eetop volatile would logically fix that, but the VM code that
clears eetop would also need modifying to perform a volatile write.
Cheers,
David
> On Mon, Apr 3, 2023, 04:50 Quan Anh Mai <qamai at openjdk.org
> <mailto:qamai at openjdk.org>> wrote:
>
> On Mon, 3 Apr 2023 09:36:39 GMT, David Holmes <dholmes at openjdk.org
> <mailto:dholmes at openjdk.org>> wrote:
>
> >> We have the strange situation where calling `t.isAlive()` on a
> `java.lang.Thread` `t`, will call into the VM (via `alive()` then
> `isAlive0()`) where the VM then examines the `eetop` field of `t` to
> extract its `JavaThread` pointer and compare it to null. We can
> simply read `eetop` directly in `Thread.alive()`:
> >>
> >> boolean alive() {
> >> return eetop != 0;
> >> }
> >>
> >> I also updated a comment in relation to `eetop`.
> >>
> >> Testing: tiers 1-3
> >>
> >> Thanks
> >
> > David Holmes has updated the pull request incrementally with one
> additional commit since the last revision:
> >
> > Comment from AlanB
>
> May I ask if we need some form of memory order here? Maybe an
> aquiring load is necessary?
>
> -------------
>
> PR Comment:
> https://git.openjdk.org/jdk/pull/13287#issuecomment-1494094776
> <https://git.openjdk.org/jdk/pull/13287#issuecomment-1494094776>
>
More information about the build-dev
mailing list