8011802: NPG: init_dependencies in class loader data graph can cause invalid CLD

Restructure initialization of ClassLoaderData to not add a new instance if init_dependencies fail

Reviewed-by: stefank, coleenp
This commit is contained in:
Mikael Gerdin 2013-04-23 08:39:55 +02:00
parent ddbf6ad621
commit c47ec9b4ca
3 changed files with 30 additions and 24 deletions

View file

@ -43,10 +43,9 @@ inline ClassLoaderData *ClassLoaderDataGraph::find_or_create(Handle loader, TRAP
assert(loader() != NULL,"Must be a class loader");
// Gets the class loader data out of the java/lang/ClassLoader object, if non-null
// it's already in the loader_data, so no need to add
ClassLoaderData** loader_data_addr = java_lang_ClassLoader::loader_data_addr(loader());
ClassLoaderData* loader_data_id = *loader_data_addr;
if (loader_data_id) {
return loader_data_id;
ClassLoaderData* loader_data= java_lang_ClassLoader::loader_data(loader());
if (loader_data) {
return loader_data;
}
return ClassLoaderDataGraph::add(loader_data_addr, loader, THREAD);
return ClassLoaderDataGraph::add(loader, false, THREAD);
}