On Mon, 21 Sep 2020 11:07:14 GMT, Robbin Ehn <r...@openjdk.org> wrote:
>> src/hotspot/share/runtime/handshake.hpp line 44: >> >>> 42: // by the target JavaThread itself or, depending on whether the >>> operation is >>> 43: // a single target/direct handshake or not, by the JavaThread that >>> requested the >>> 44: // handshake or the VMThread respectively. >> >> This comment now indicates that all single target handshakes are executed as >> direct-handshakes and never by the >> VMThread - is that correct? > > The concept of direct handshake do not exist in that way. (but can easily be > implemented using the filter) > You have operation that you need to be executed on a JavaThread, you add that > to that JavaThread. > Any thread ("driver") that succeed to claim that JavaThreads handshake state > (lock and that JavaThread is safe) procced > to execute from that handshake queue until empty (empty according to applied > filter on queue). I think the entire comment block above can now be simplified: // A handshake closure is a callback that is executed for a JavaThread // while it is in a safepoint/handshake-safe state. Depending on the // nature of the closure, the callback may be executed by the initiating // thread, the target thread, or the VMThread. If the callback is not executed // by the target thread it will remain in a blocked state until the callback completes. >> src/hotspot/share/runtime/handshake.cpp line 230: >> >>> 228: log_trace(handshake)("Threads signaled, begin processing blocked >>> threads by VMThread"); >>> 229: HandshakeSpinYield hsy(start_time_ns); >>> 230: int executed_by_driver = 0; >> >> driver?? Isn't this still the VMThread? > > The driver is VM thread or a JavaThread. But this is VM_HandshakeAllThreads (a VM_Operation), it can't be executed by anything other than the VMThread! ------------- PR: https://git.openjdk.java.net/jdk/pull/151