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

Reply via email to