RFR (s): JDK-8013136 NPG: Parallel class loading tests fail after fix for JDK-8011802
Stefan Karlsson
stefan.karlsson at oracle.com
Wed Apr 24 16:12:00 UTC 2013
On 4/24/13 6:01 PM, Mikael Gerdin wrote:
> Hi,
> here we go again...
>
> Problem:
> My attempt at fixing JDK-8011802 was flawed since the ClassLoaderData
> constructor saves the raw class loader oop.
> Since my fix called init_dependencies() after constructing the
> ClassLoaderData the j.l.ClassLoader may have moved and we would crash
> later on when trying to look at the _class_loader field.
>
> Suggested fix:
> I suggest that we move the initialization of the Dependencies object
> to before we create the ClassLoaderData and pass the Dependencies
> object by value to the ClassLoaderData constructor (it only contains
> one pointer so there should be no additional overhead in this copy).
>
> This way we also get rid of the need to delete the CLD if we got an
> exception allocating the Dependencies.
>
> I moved the No_Safepoint_Verifier to before we allocate the
> ClassLoaderData so that it protects the _class_loader oop as well.
>
> Since we no longer need an explicit initialization of dependencies in
> the general case I added some assertions to init_dependencies() since
> it's only needed for the boot class loader now.
>
> I also took the liberty to remove the left-over
> "if (cld_addr != NULL)" check since that was used to determine if we
> were dealing with a CLD for an anonymous class. Since the check for
> is_anonymous is right before this and we only read the cld_addr we are
> dealing with a normal class loader the check is unnecessary.
>
> Webrev: http://cr.openjdk.java.net/~mgerdin/8013136/webrev.0/
Looks good to me.
StefanK
>
> jbs: https://jbs.oracle.com/bugs/browse/JDK-8013136
> bugs.sun.com (bug not visible yet):
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8013136
>
> Testing:
> nashorn test262parallel and parallel class loading tests
>
> /Mikael
More information about the hotspot-gc-dev
mailing list