[lworld] Integrated: 8303416: [lworld] Fix JVM crash at Unsafe_FinishPrivateBuffer
Xiaohong Gong
xgong at openjdk.org
Mon Mar 13 15:21:13 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.
This pull request has now been integrated.
Changeset: d8e7d2eb
Author: Xiaohong Gong <xgong at openjdk.org>
Committer: Tobias Hartmann <thartmann at openjdk.org>
URL: https://git.openjdk.org/valhalla/commit/d8e7d2eb3837c6b18a2c88955ae2ab89667889bb
Stats: 113 lines in 3 files changed: 112 ins; 0 del; 1 mod
8303416: [lworld] Fix JVM crash at Unsafe_FinishPrivateBuffer
Reviewed-by: thartmann
-------------
PR: https://git.openjdk.org/valhalla/pull/828
More information about the valhalla-dev
mailing list