RFR: 8322743: assert(held_monitor_count() == jni_monitor_count()) failed
Tobias Hartmann
thartmann at openjdk.org
Wed Jan 17 07:22:52 UTC 2024
On Tue, 9 Jan 2024 22:57:27 GMT, Vladimir Kozlov <kvn at openjdk.org> wrote:
> Corner case with a local (not escaped) object used for synchronization. C2 Escape Analysis thinks that it can eliminate locks for it. In most cases it is true but not in this case.
>
>
> for (int i = 0; i < 2; ++i) {
> Object o = new Object();
> synchronized (o) { // monitorenter
> // Trigger OSR compilation
> for (int j = 0; j < 100_000; ++j) {
>
> The test has nested loop which trigger OSR compilation. The locked object comes from Interpreter into compiled OSR code. During parsing C2 creates an other non escaped object and correctly merge both together (with Phi node) so that non escaped object is not scalar replaceable. Because it does not globally escapes EA still removes locks for it and, as result, also for merged locked object from Interpreter which is the bug.
>
> The fix is to check that synchronized block does not have any associated escaped objects when EA decides if locks can be eliminated.
>
> Added regression test prepared by @TobiHartmann. Tested tier1-5, xcomp and stress.
> Performance testing show no difference.
test/hotspot/jtreg/compiler/escapeAnalysis/TestLocksInOSR.java line 1:
> 1: /* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
Suggestion:
/*
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
test/hotspot/jtreg/compiler/escapeAnalysis/TestLocksInOSR.java line 26:
> 24: * @test
> 25: * @bug 8322743
> 26: * @summary EA incorrectly marks locks for elimiation for escaped object which comes from Interpreter in OSR compilation.
Suggestion:
* @summary EA incorrectly marks locks for elimination for escaped object which comes from Interpreter in OSR compilation.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17331#discussion_r1454787771
PR Review Comment: https://git.openjdk.org/jdk/pull/17331#discussion_r1454785515
More information about the hotspot-compiler-dev
mailing list