On Thu, 31 Aug 2023 11:41:03 GMT, Alan Bateman <[email protected]> wrote:
>> src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp line 410:
>>
>>> 408: }
>>> 409: if (JAVA_SAMPLE == type) {
>>> 410: if (thread_state_in_java(thread) &&
>>> !is_vthread_in_transition(thread)) {
>>
>> I think this check can be postponed until after the thread is suspended.
>
> Is the check in OSThreadSampler::protected_task in the right place? That
> seems to be a suspended context.
>
> For JfrThreadSampleClosure::do_sample_thread, I think I may have mis-read the
> code. I thought it was suspended but looking at it again them maybe it should
> be the JfrNativeSamplerCallback implementation. This is probably an area
> where I need help to get right.
OSThreadSampler::protected_task() is the correct place to perform the test. The
sampled thread is completely suspended at this location. The other locations
are optimistic, they read the thread state while the sampled thread is running
to avoid signalling a thread unnecessarily. You don't need the
is_vthread_in_transtition() check there, especially not for the
thread_in_native case, since that would not be possible, would it?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/15492#discussion_r1311632129