Hi,

I propose a simple fix for two initialization issues described/linked in:

https://bugs.openjdk.java.net/browse/JDK-8136893

The patch is here:

http://cr.openjdk.java.net/~plevart/jdk9-dev/8136893_MethodType.fromDescriptor/webrev.01/

The 1st issue is the method: MetodType.fromMethodDescriptorString(String descriptor, ClassLoader loader)

This method is specified to treat null ClassLoader parameter as the system class loader. When lava.lang.invoke infrastructure is initialized before system class loader has been set, we get exceptions:

http://mail.openjdk.java.net/pipermail/mlvm-dev/2015-March/006386.html

java.lang.invoke initialization should not need to use system class loader as all types it must resolve during initialization are resolvable by bootstrap loader. Above method is public API and we can't change it's behavior, but can introduce another internal method that behaves a little differently - treating null ClassLoader as bootstrap class loader. All internal usages are rerouted to this internal method.

The 2nd issue is a little utility method: TypeConvertingMethodAdapter.boxingDescriptor(Wrapper w)

It uses String.format() to format a method type descriptor from two components. This unnecessarily brings in the Locale infrastructure which needs system class loader to locate providers:

http://mail.openjdk.java.net/pipermail/mlvm-dev/2015-March/006387.html

The fix is to replace String.format with simple string concatenation.

I have run the tests in java.lang.invoke and only have a problem with 1 test which seems to be related to the test or jtreg itself and happens also without my patch applied:

#Test Results (version 2)
#Tue Sep 22 09:48:38 CEST 2015
#-----testdescription-----
$file=/home/peter/work/hg/jdk9-dev/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java
$root=/home/peter/work/hg/jdk9-dev/jdk/test
author=kshefov
error=Parse Exception\: `@library' must appear before first `@run'
keywords=bug8046703 randomness othervm ignore
run=USER_SPECIFIED ignore 8078602\nUSER_SPECIFIED build TestMethods\nUSER_SPECIFIED build LambdaFormTestCase\nUSER_SPECIFIED build LFGarbageCollectedTest\nUSER_SPECIFIED main/othervm -Xmx64m -XX\:SoftRefLRUPolicyMSPerMB\=0 -XX\:+HeapDumpOnOutOfMemoryError -DHEAP_DUMP\=false LFGarbageCollectedTest\n
source=LFGarbageCollectedTest.java
title=Test verifies that lambda forms are garbage collected

#-----environment-----

#-----testresult-----
description=file\:/home/peter/work/hg/jdk9-dev/jdk/test/java/lang/invoke/LFCaching/LFGarbageCollectedTest.java
elapsed=2 0\:00\:00.002
end=Tue Sep 22 09\:48\:38 CEST 2015
environment=regtest
execStatus=Error. Parse Exception\: `@library' must appear before first `@run'
harnessLoaderMode=Classpath Loader
harnessVariety=Full Bundle
hostname=peterl.marand.si
javatestOS=Linux 4.1.5-100.fc21.x86_64 (amd64)
javatestVersion=4.6
jtregVersion=jtreg 4.2.0 dev tip
script=com.sun.javatest.regtest.RegressionScript
sections=script_messages
start=Tue Sep 22 09\:48\:38 CEST 2015
test=java/lang/invoke/LFCaching/LFGarbageCollectedTest.java
totalTime=2
user.name=peter
work=/home/peter/work/hg/jdk9-dev/jdk/JTwork/java/lang/invoke/LFCaching

#section:script_messages
----------messages:(0/0)----------


test result: Error. Parse Exception: `@library' must appear before first `@run'



Regards, Peter

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to