This is a simple fix of three similar asserts. The `_target_jt->jvmti_vthread()` has to be used instead of `_target_jt->vthread()`. The `_target_jt->vthread()` can be outdated in some specific contexts as shown in the `hs_err` stack trace.
I've seen similar issue and already fixed it in this fragment of code: class GetCurrentLocationClosure : public JvmtiUnitedHandshakeClosure { . . . void do_vthread(Handle target_h) { assert(_target_jt == nullptr || !_target_jt->is_exiting(), "sanity check"); // use jvmti_vthread() as vthread() can be outdated assert(_target_jt == nullptr || _target_jt->jvmti_vthread() == target_h(), "sanity check"); . . . The issue above was fixed by replacing `_target_jt->vthread()` with `_target_jt->jvmti_vthread()`. There are three places which need to be fixed the same way: - `GetSingleStackTraceClosure::do_vthread(Handle target_h)` - `SetForceEarlyReturn::do_vthread(Handle target_h)` - `UpdateForPopTopFrameClosure::do_vthread(Handle target_h)` Testing: - Run mach5 tiers 1-6 ------------- Commit messages: - add comments explaining that the vthread() can return outdated oop - 8330303: Crash: assert(_target_jt == nullptr || _target_jt->vthread() == target_h()) failed Changes: https://git.openjdk.org/jdk/pull/18806/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18806&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8330303 Stats: 6 lines in 2 files changed: 3 ins; 0 del; 3 mod Patch: https://git.openjdk.org/jdk/pull/18806.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/18806/head:pull/18806 PR: https://git.openjdk.org/jdk/pull/18806