[lworld] RFR: 8303416: [lworld] Fix JVM crash at Unsafe_FinishPrivateBuffer
Xiaohong Gong
xgong at openjdk.org
Fri Mar 3 08:38:14 UTC 2023
On Thu, 2 Mar 2023 09:00:41 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:
> When calling Unsafe.finishPrivateBuffer(), JVM crashes with following
> assertion failure:
>
>
> Internal Error (/mnt/local/code/valhalla/src/hotspot/share/prims/unsafe.cpp:388), pid=29517, tid=29518
> assert(v->mark().is_larval_state()) failed: must be a larval value
>
> JRE version: OpenJDK Runtime Environment (21.0) (fastdebug build 21-internal-git-05e4d0dba)
> Java VM: OpenJDK 64-Bit Server VM (fastdebug 21-internal-git-05e4d0dba, mixed mode, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
> Problematic frame:
> V [[libjvm.so](http://libjvm.so/)+0x1a92a64] Unsafe_FinishPrivateBuffer+0xc0
>
> The assertion is used to check whether the input value is in larval
> state. Usually this method is called after `Unsafe.makePrivateBuffer()`,
> which will create a new oop and set it to larval state. If everything
> works fine, the above assertion won't fail. But the issue happens if
> all the fields of the input value object of `Unsafe.makePrivateBuffer()`
> are the relative java default values (i.e. `0`). The root cause is the
> C2 compiler will optimize the new buffered oop to the default oop for
> such value object, and the larval state is missed during the optimization.
> Marking the larval bit of the optimized oop can fix the issue.
Hi,
The new commit reverts the larval state setting to the default oop. As consider the default oop is immutable, the new private buffered oop with larval state is not right to be optimized to the default oop. Since we know its fields will be changed after then. So the new commit just discards the optimization of the inline type if its oop is an allocated buffer with larval state. Note that current version is still an incomplete fix until [JDK-8239003](https://bugs.openjdk.java.net/browse/JDK-8239003) in.
Please feel free to review this PR. Thanks a lot in advance!
Best Regards,
Xiaohong
-------------
PR: https://git.openjdk.org/valhalla/pull/828
More information about the valhalla-dev
mailing list