RFR: 8038468: java/lang/instrument/ParallelTransformerLoader.sh fails with ClassCircularityError
Yumin Qi
yumin.qi at oracle.com
Wed Nov 26 22:36:53 UTC 2014
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 hotspot-runtime-dev
mailing list