RFR: 8266330: itableMethodEntry::initialize() asserts with archived old classes

Yumin Qi minqi at openjdk.java.net
Sun May 9 17:45:10 UTC 2021


On Fri, 7 May 2021 22:32:33 GMT, Calvin Cheung <ccheung at openjdk.org> wrote:

> #ifdef ASSERT 
>   if (MetaspaceShared::is_in_shared_metaspace((void*)&_method) && 
>      !MetaspaceShared::remapped_readwrite() && 
>      !MetaspaceShared::is_old_class(m->method_holder())) { 
>     // At runtime initialize_itable is rerun as part of link_class_impl() 
>     // for a shared class loaded by the non-boot loader. 
>     // The dumptime itable method entry should be the same as the runtime entry. 
>     assert(_method == m, "sanity"); 
>   } 
> #endif
> 
> 
> The above includes the check for !MetaspaceShared::is_old_class(m->method_holder()).
> While the method_holder() is not an old class, the _klass in the klassITable could be an old class.
> The proposed fix is to have the caller of the above function pass in the _klass and add another check
> making sure the _klass is not an old class before the assert.
> 
> Testing:
> - [x] tiers 1 and 2 (including the new test)

LGTM, minor nits.

src/hotspot/share/oops/klassVtable.cpp line 1097:

> 1095:   if (MetaspaceShared::is_in_shared_metaspace((void*)&_method) &&
> 1096:      !MetaspaceShared::remapped_readwrite() &&
> 1097:      !MetaspaceShared::is_old_class(m->method_holder()) && !MetaspaceShared::is_old_class(klass)) {

The newly added check should start with a new line as existing checks.

-------------

Marked as reviewed by minqi (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/3930


More information about the hotspot-runtime-dev mailing list