RFR: 8266557: assert(SafepointMechanism::local_poll_armed(_handshakee)) failed: Must be

David Holmes david.holmes at oracle.com
Tue May 18 07:26:02 UTC 2021


Hi Robbin,

On 17/05/2021 11:02 pm, Robbin Ehn wrote:
> Please consider this change-set which address the issue on hand.
> 
> I identified two problems:
> 
> - is_locked() uses the _owner field which is unordered (no storestore|storeload) on store-side.
> Fixed by leaving the handshakee being processed in queue until completed.

Sorry but I'm not seeing how leaving or removing the op from the queue 
impacts things here. Which thread is reading the queue and seeing a 
wrong value?

Thanks,
David
-----

> And remove looping, since if ever the queue is empty the handshakee may processed.
> If ever want to loop again, we must make sure queue is not empty before removing the processed handshake.
> But there is, at this moment, no performance benefit to that, so I chosse the simple, easy to reason about version. (some crazy stress test can see a difference)
> 
> Note that I'll do a follow-up and make is_locked() ifdef ASSERT only.
> 
> - have_non_self_executable_operation() only provide correct acquire if first in queue matched, if second item matched it could be re-orderd with reading the poll state.
> Fixed by adding a loadload.
> 
> I could at first reproduce by checking _active_handshaker in update_poll (~1/50) and an increase in the test time by ten.
> (real reprod ~1/400 with increased test time)
> If we are updating the poll there should not be an active handshaker.
> The above fixed the issue.
> But after a rebase when I was trying to pin point the issue I could no longer reproduce even without any changes.
> 
> Added Atomic store/load to _active_handshaker since it may be concurrently loaded (it may only be used to ask if current thread is active handshaker).
> 
> Passes stressing relevant test on aarch64 and t1-7.
> 
> Thanks, Robbin
> 
> -------------
> 
> Commit messages:
>   - Fix
> 
> Changes: https://git.openjdk.java.net/jdk/pull/3973/files
>   Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3973&range=00
>    Issue: https://bugs.openjdk.java.net/browse/JDK-8266557
>    Stats: 152 lines in 6 files changed: 81 ins; 42 del; 29 mod
>    Patch: https://git.openjdk.java.net/jdk/pull/3973.diff
>    Fetch: git fetch https://git.openjdk.java.net/jdk pull/3973/head:pull/3973
> 
> PR: https://git.openjdk.java.net/jdk/pull/3973
> 


More information about the hotspot-runtime-dev mailing list