RFR: 8330253: Skip verify_consistent_lock_order when deoptimizing from monitorenter bytecode. [v2]
    Daniel D. Daugherty 
    dcubed at openjdk.org
       
    Wed Apr 17 17:02:04 UTC 2024
    
    
  
On Wed, 17 Apr 2024 05:41:26 GMT, Axel Boldt-Christmas <aboldtch at openjdk.org> wrote:
>> The verification added in [JDK-8329757](https://bugs.openjdk.org/browse/JDK-8329757) will not work then deoptimization occurs on a monitorenter bytecode. The locking may be in a transitional state. This patch will skip the verification when this occurs.
>> 
>> Currently have only seen this reproduce with JVMTI when deoptimization occurs while a java thread is waiting on a contended monitor. However this could potentially be triggered from a VM entry slow path, so simply checking `current_pending_monitor` could be flaky as well. So instead simply avoid verification.
>> 
>> Running JVMTI reproducer. Starting full testing soon.
>
> Axel Boldt-Christmas has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Handle previous bc being monitorenter
>  - Remove implicit conditions
Changes requested by dcubed (Reviewer).
src/hotspot/share/runtime/deoptimization.cpp line 443:
> 441:   }
> 442: #ifdef ASSERT
> 443:   if (LockingMode == LM_LIGHTWEIGHT && !realloc_failures) {
In the new code, you are no longer account for `realloc_failures` being true.
I'm not convinced that is okay here.
src/hotspot/share/runtime/deoptimization.cpp line 449:
> 447:                                                        : chunk->first()->method()->code_at(bci - 1) != Bytecodes::_monitorenter;
> 448:     const bool is_syncronized_entry = chunk->first()->method()->is_synchronized() &&
> 449:                                       chunk->first()->raw_bci() == SynchronizationEntryBCI;
nit typo: s/is_syncronized_entry/is_synchronized_entry/
src/hotspot/share/runtime/deoptimization.cpp line 450:
> 448:     const bool is_syncronized_entry = chunk->first()->method()->is_synchronized() &&
> 449:                                       chunk->first()->raw_bci() == SynchronizationEntryBCI;
> 450:     // If deoptimizing from monitorenter bytecode we maybe in transitional state. Skip verification.
nit typo: s/we maybe/we may be/
nit typo: s/in transitional state/is a transitional state/
src/hotspot/share/runtime/deoptimization.cpp line 451:
> 449:                                       chunk->first()->raw_bci() == SynchronizationEntryBCI;
> 450:     // If deoptimizing from monitorenter bytecode we maybe in transitional state. Skip verification.
> 451:     // When reexecuting the current bc, the previous bc may not have finished yet.
Should this:
`... the previous bc may not have finished yet.`
be:
`... the previous monitorenter bc may not have finished yet.`
-------------
PR Review: https://git.openjdk.org/jdk/pull/18782#pullrequestreview-2006612177
PR Review Comment: https://git.openjdk.org/jdk/pull/18782#discussion_r1569166375
PR Review Comment: https://git.openjdk.org/jdk/pull/18782#discussion_r1569159605
PR Review Comment: https://git.openjdk.org/jdk/pull/18782#discussion_r1569160377
PR Review Comment: https://git.openjdk.org/jdk/pull/18782#discussion_r1569168751
    
    
More information about the hotspot-dev
mailing list