RFR: 8257831: Suspend with handshakes [v10]
Robbin Ehn
rehn at openjdk.java.net
Mon Apr 19 07:18:48 UTC 2021
On Mon, 19 Apr 2021 04:19:28 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> Robbin Ehn has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Fixed nits
>
> src/hotspot/share/runtime/handshake.cpp line 630:
>
>> 628: // This is the closure that prevents a suspended JavaThread from
>> 629: // escaping the suspend request.
>> 630: class ThreadSuspensionHandshake : public AsyncHandshakeClosure {
>
> I still find ThreadSuspensionHandShake versus SuspendThreadHandshake to be too similarly named and with no obvious way to remember which one is which. Perhaps this one could be called ThreadSelfSuspensionHandshake instead?
Fixed
> src/hotspot/share/runtime/handshake.cpp line 636:
>
>> 634: JavaThread* target = thr->as_Java_thread();
>> 635: target->handshake_state()->do_self_suspend();
>> 636: }
>
> As this must be the current thread we are dealing with can we rename the variables to indicate that.
Fixed
> src/hotspot/share/runtime/handshake.hpp line 128:
>
>> 126: // must take slow path, process_by_self(), if _lock is held.
>> 127: bool should_process() {
>> 128: // When doing thread suspension the holder of the _lock
>
> Potentially this could be any async handshake operation - right? It seems odd to talk specifically about thread suspension in the core of the handshake code.
Changed
> src/hotspot/share/runtime/handshake.hpp line 131:
>
>> 129: // can add an asynchronous handshake to queue.
>> 130: // To make sure it is seen by the handshakee, the handshakee must first
>> 131: // check the _lock, if held go to slow path.
>
> ..., _and_ if held ...
Fixed
> src/hotspot/share/runtime/handshake.hpp line 133:
>
>> 131: // check the _lock, if held go to slow path.
>> 132: // Since the handshakee is unsafe if _lock gets locked after this check
>> 133: // we know another thread cannot process any handshakes.
>
> I can't quite understand this comment. I'm not sure what thread is calling this method and when, in relation to what the handshakee may be doing.
The handshakee is in a safe state, e.g. blocked and does:
Point A: set_thread_state_fence(_thread_blocked_trans);
...
Point B: _lock.is_locked()
While the processor thread does:
Point X: _lock.try_lock();
...
Point Z: thread->thread_state();
If point B is passed with a non-locked lock, point Z is guaranteed to see an unsafe thread and will not start to process ay handshakes.
Is that make sense, maybe the comment make more sense ? :)
-------------
PR: https://git.openjdk.java.net/jdk/pull/3191
More information about the serviceability-dev
mailing list