RFR: 8347463: jdk/jfr/threading/TestManyVirtualThreads.java crashes with assert(oopDesc::is_oop_or_null(val))

Anton Seoane Ampudia aseoane at openjdk.org
Tue Oct 21 09:31:46 UTC 2025


This PR introduces a fix for a intermittent assert crash due to a non-oop found in the stack when deoptimizing.

The `inline_native_GetEventWriter` JFR intrinsic performs a call into the runtime, which can safepoint, to write a checkpoint for the vthread. This call returns a global handle (`jobject`) that then gets resolved to a raw oop.

However, the corresponding `jfr_write_checkpoint_Type` does not set any return, modelling the call as `void`. If a safepoint hits in the small window after the stub returns but before the writer oop is used, and the GC moves the object in that window, the deoptimization path cannot resolve a handle that it never recorded, leading to the subsequent crash.

**Testing:** passes tiers 1-5

-------------

Commit messages:
 - Merge branch 'openjdk:master' into JDK-8347463
 - Change to a more specific type
 - Runtime call had void type but actually returned an object

Changes: https://git.openjdk.org/jdk/pull/27913/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=27913&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8347463
  Stats: 3 lines in 1 file changed: 1 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/27913.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27913/head:pull/27913

PR: https://git.openjdk.org/jdk/pull/27913


More information about the hotspot-compiler-dev mailing list