RFR: 8342303: Segfault in update_inherited_vtable: AppCDS, old bytecode, and redefineClasses [v3]

Calvin Cheung ccheung at openjdk.org
Thu Oct 31 21:20:34 UTC 2024


On Thu, 31 Oct 2024 02:37:26 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Calvin Cheung has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   avoid using getContextClassLoader()
>
> test/hotspot/jtreg/runtime/cds/appcds/jvmti/redefineClasses/OldClassAndRedefineClassApp.java line 34:
> 
>> 32:         System.out.println("Main: loading OldSuper");
>> 33:         // Load an old class (version 49), but not linking it.
>> 34:         ClassLoader.getSystemClassLoader().loadClass("OldSuper");
> 
> Why not `Class.forName` in all cases ??

I've changed it to use Class.forName().

> test/hotspot/jtreg/runtime/cds/appcds/jvmti/redefineClasses/OldClassAndRedefineClassApp.java line 39:
> 
>> 37:         Instrumentation instrumentation = InstrumentationRegisterClassFileTransformer.getInstrumentation();
>> 38:         System.out.println("INFO: instrumentation = " + instrumentation);
>> 39:         Class c = ClassLoader.getSystemClassLoader().loadClass("Hello");
> 
> Suggestion:
> 
>         Class<?> c = ClassLoader.getSystemClassLoader().loadClass("Hello");

Fixed.

> test/hotspot/jtreg/runtime/cds/appcds/jvmti/redefineClasses/RedefineBootClassApp.java line 33:
> 
>> 31:         File bootJar = new File(args[0]);
>> 32: 
>> 33:         Class superCls = Class.forName("BootSuper", false, null);
> 
> Suggestion:
> 
>         Class<?> superCls = Class.forName("BootSuper", false, null);

Fixed.

> test/hotspot/jtreg/runtime/cds/appcds/jvmti/redefineClasses/RedefineBootClassApp.java line 56:
> 
>> 54:         }
>> 55: 
>> 56:         Class childCls = Class.forName("BootChild", false, null);
> 
> Suggestion:
> 
>         Class<?> childCls = Class.forName("BootChild", false, null);

Fixed.

> test/hotspot/jtreg/runtime/cds/appcds/jvmti/redefineClasses/RedefineOldSuperApp.java line 33:
> 
>> 31:         File bootJar = new File(args[0]);
>> 32: 
>> 33:         Class superCls = ClassLoader.getSystemClassLoader().loadClass("OldSuper");
> 
> Suggestion:
> 
>         Class<?> superCls = ClassLoader.getSystemClassLoader().loadClass("OldSuper");

Fixed.

> test/hotspot/jtreg/runtime/cds/appcds/jvmti/redefineClasses/RedefineOldSuperApp.java line 56:
> 
>> 54:         }
>> 55: 
>> 56:         Class childCls = ClassLoader.getSystemClassLoader().loadClass("NewChild");
> 
> Suggestion:
> 
>         Class<?> childCls = ClassLoader.getSystemClassLoader().loadClass("NewChild");

Fixed.
Also, changed `ClassLoader.getSystemClassLoader().loadClass()` to `Class.forName()`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21667#discussion_r1825172154
PR Review Comment: https://git.openjdk.org/jdk/pull/21667#discussion_r1825172119
PR Review Comment: https://git.openjdk.org/jdk/pull/21667#discussion_r1825172209
PR Review Comment: https://git.openjdk.org/jdk/pull/21667#discussion_r1825172238
PR Review Comment: https://git.openjdk.org/jdk/pull/21667#discussion_r1825172275
PR Review Comment: https://git.openjdk.org/jdk/pull/21667#discussion_r1825172349


More information about the hotspot-runtime-dev mailing list