RFR: 8038468: java/lang/instrument/ParallelTransformerLoader.sh fails with ClassCircularityError
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Wed Nov 26 23:01:20 UTC 2014
The fix looks good to me.
The class loading condition change is reasonable.
Thanks,
Serguei
On 11/26/14 2:36 PM, Yumin Qi wrote:
> Hi, please review again for new change for fixing the
> ClassCircularityError (CCE) in this test case.
>
> More debug tails revealed that the CCE always happened at the
> beginning of the loop, before the real loading of TestClass[1-3]
> loaded, transform is called against system classes too (though they
> did not get loaded by agent). The check for loader which passed to
> transform is done before calling loading 'TestClass3', if it is null
> skip loading. This can prevent from loading loader itself before
> loading 'TestClass3', thus avoid seeing $JarLoader$2 twice on
> PlaceHolderTable. Meanwhile remove the block 'sleep' which is used to
> workaround deadlock at the beginning of transform. With the change
> which only loads class TestClass3 when loader is not null, this
> workaround is not needed. It is the loader loading caused both the
> issues here.
>
> new URL:
> http://cr.openjdk.java.net/~minqi/8038468/webrev02/
>
>
> On 10/13/14, 3:58 PM, Yumin Qi wrote:
>> bug: https://bugs.openjdk.java.net/browse/JDK-8038468
>> webrev:*http://cr.openjdk.java.net/~minqi/8038468/webrev00/
>>
>> the bug marked as confidential so post the webrev internally.
>>
>> Problem: The test case tries to load a class from the same jar via
>> agent in the middle of loading another class from the jar via same
>> class loader in same thread. The call happens in transform which is a
>> rare case --- in middle of loading class, loading another class. The
>> result is a CircularityError. When first class is in loading, in vm
>> we put JarLoader$2 on place holder table, then we start the
>> defineClass, which calls transform, begins loading the second class
>> so go along the same routine for loading JarLoader$2 first, found it
>> already in placeholder table. A CircularityError is thrown.
>> Fix: The test case should not call loading class with same class
>> loader in same thread from same jar in 'transform' method. I modify
>> it loading with system class loader and we expect see
>> ClassNotFoundException. Detail see bug comments.
>>
>> Thanks
>> Yumin *
More information about the jdk9-dev
mailing list