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

Robbin Ehn rehn at openjdk.java.net
Mon May 17 13:02:07 UTC 2021


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.
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