RFR(s): 8210303: VM_HandshakeAllThreads fails assert with "failed: blocked and not walkable"

Robbin Ehn robbin.ehn at oracle.com
Wed Oct 3 11:10:42 UTC 2018

Hi all, please review.

VM thread checks if it can processes a handshake for a JavaThread. That
check will only return a stable value if the VM thread holds the handshake
semaphore (or at safepoint). To avoid an unnecessary grabbing of the semaphore
just to release it, the VM thread do an early check to see if there is any point
to do the stable check. But the method SafepointSynchronize::safepoint_safe() is
not suppose to handle unstable checks. This can causes a false positive from an
assert in safepoint_safe().

This change-set adds a local function for doing the unstable check without 
asserts. I do not want to expose a generic method for doing unstable safepoint 
safe test.

Since asserts are not in release builds, there is no indication of a bug in JDK
11. But since 11 is a LTS, this should also be considered for back-porting.

Note, in JDK 11 only ZGC uses handshakes, previously releases have no users of 



I could not reproduce it, sanity with t1-3 + handshake tests.

Thanks, Robbin

More information about the hotspot-runtime-dev mailing list