RFR: 8358568: C2 compilation hits "must have a monitor" assert with -XX:-GenerateSynchronizationCode
hanguanqiang
duke at openjdk.org
Thu Jul 3 03:16:43 UTC 2025
On Thu, 3 Jul 2025 01:59:55 GMT, hanguanqiang <duke at openjdk.org> wrote:
> This PR fixes JDK-8358568, a JVM crash triggered when running with -XX:-GenerateSynchronizationCode
>
> Problem:
> When synchronization code generation is disabled by -XX:-GenerateSynchronizationCode, the compiler’s do_monitor_exit() method still tries to access monitor objects without checking if any monitors exist.This causes an assertion failure and JVM crash.
>
> Root Cause:
> Parse::do_monitor_exit() calls shared_unlock() using monitor info unconditionally,but with GenerateSynchronizationCode disabled, no monitor info is available, leading to invalid access.
>
> Fix
> Add a check in do_monitor_exit() to skip monitor unlocking if GenerateSynchronizationCode is false, avoiding invalid monitor access and preventing the crash.
I’ve investigated some of the earliest versions of the source code, including JDK 6, but was unable to identify the original author of this flag or its intended purpose.
In any case, if someone with the authority agrees that this flag is no longer relevant, I’d be glad to take on the task of removing it.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26108#issuecomment-3030446171
More information about the hotspot-compiler-dev
mailing list