On Mon, 18 Jul 2022 04:14:03 GMT, Ioi Lam <[email protected]> wrote:
>> Since the impact of this bug can be big, and the fix is simple and low risk
>> (just avoids doing optimizations), I'd like to put this into JDK 19 before
>> RDP2 (Jul 21).
>>
>> CDS cannot handle Lambda proxy classes that are generated in the
>> useImplMethodHandle mode. This could happen with classfiles generated by JDK
>> 8 or JDK 11 that access protected methods in a base class from a different
>> package. E.g.,
>>
>>
>> class pkg1.Base {
>> protected void doit(String s) {
>> System.out.println(s);
>> }
>> }
>> class pkg2.Child extends pkg1.Base {
>> void test() {
>> Optional<String> opt = Optional.of("foo");
>> opt.ifPresent(this::doit);
>> }
>> }
>>
>>
>> More details of useImplMethodHandle can be found here:
>> https://github.com/openjdk/jdk/blob/522b65743ca10fcba0a27d25b8fa11319999e228/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java#L183-L191
>>
>> More details about the condition that triggers the error can be found in the
>> test file Child.jcod.
>
> Ioi Lam has updated the pull request incrementally with one additional commit
> since the last revision:
>
> fixed typo
Looks fine. I agree that this fix is low risk to disable archiving the
lambda proxy in the case when passing a live method handle for invocation.
test/hotspot/jtreg/runtime/cds/appcds/test-classes/pkg1/BaseWithProtectedMethod.java
line 29:
> 27: public class BaseWithProtectedMethod {
> 28: protected void protectedMethod(String s) {
> 29: Thread.dumpStack();
is it intentional for the test to keep dumping the stack?
-------------
Marked as reviewed by mchung (Reviewer).
PR: https://git.openjdk.org/jdk19/pull/146