RFR: 8273695: Safepoint deadlock on VMOperation_lock [v3]
Robbin Ehn
rehn at openjdk.java.net
Fri Sep 24 16:48:38 UTC 2021
> We should not do any processing in SM::should_process().
> The query is used to determine if we need to process safepoint/handshakes and with this change StackWaterMark.
> When locking a Mutex which may be acquired in such processing, we must release that Mutex before we can start processing, otherwise we can deadlock.
>
> This change adds a method to determine if StackWaterMarkSet::on_safepoint() will do any processing.
> In that case there are poll is armed, we do not allow suspend handshakes and there is no safepoint and no non-suspend handshakes, we still return true if StackWaterMarkSet needs processing.
> Thus the code querying should release any such Mutex and call process SM::process_if_requested().
>
> The cross_modify_fence() do not have any such state, so we still need to emit that before returning false if poll is armed.
>
> Passes t1-t4 and local stressing.
Robbin Ehn has updated the pull request incrementally with one additional commit since the last revision:
Fixed spelling
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/5613/files
- new: https://git.openjdk.java.net/jdk/pull/5613/files/536bb9e8..e5b52cda
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=5613&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=5613&range=01-02
Stats: 2 lines in 1 file changed: 0 ins; 0 del; 2 mod
Patch: https://git.openjdk.java.net/jdk/pull/5613.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5613/head:pull/5613
PR: https://git.openjdk.java.net/jdk/pull/5613
More information about the hotspot-runtime-dev
mailing list