RFR: 8355915: [leyden] Crash in MDO clearing the unloaded array type [v3]
Igor Veresov
iveresov at openjdk.org
Thu May 1 19:28:09 UTC 2025
On Wed, 30 Apr 2025 10:01:58 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
>> Caught this when doing benchmarks with Spring Boot. See the bug for reproducer.
>>
>> The lifecycle of array types of `T` is bound to the lifecycle of `T` themselves. So the fix does similar thing to `is_excluded` and other code: when we encounter the `T[]`, we ask if its bottom component classes is not yet initialized. This fits nicely with our current uses, which skip such classes, and ever touch their (potentially nullptr) CLDs.
>>
>> Additional testing:
>> - [x] Ad-hoc testing with most recent spring-boot-petclinic
>> - [x] Linux x86_64 server fastdebug, `runtime/cds`
>
> Aleksey Shipilev has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
>
> - Co-opt Igor's fix
> - Merge branch 'premain' into JDK-8355915-mdo-array-crash
> - More robust fix
> - Fix
> - Fix
src/hotspot/share/ci/ciMethodData.cpp line 317:
> 315: for (uint row = 0; row < row_limit(); row++) {
> 316: Klass* k = data->as_ReceiverTypeData()->receiver(row);
> 317: if (k != nullptr && k->is_loader_present_and_alive() && is_klass_loaded(k)) {
This little part is actually incorrect. It should be just `k->class_loader_data() != nullptr` because there are different branch before for handling if `is_loader_alive()` and if not. I'll push the fix.
-------------
PR Review Comment: https://git.openjdk.org/leyden/pull/64#discussion_r2070695947
More information about the leyden-dev
mailing list