< prev index next >

src/hotspot/share/classfile/classLoaderDataGraph.cpp

Print this page

        

*** 178,196 **** bool ClassLoaderDataGraph::_safepoint_cleanup_needed = false; bool ClassLoaderDataGraph::_metaspace_oom = false; // Add a new class loader data node to the list. Assign the newly created // ClassLoaderData into the java/lang/ClassLoader object as a hidden field ! ClassLoaderData* ClassLoaderDataGraph::add_to_graph(Handle loader, bool is_unsafe_anonymous) { assert_lock_strong(ClassLoaderDataGraph_lock); ClassLoaderData* cld; // First check if another thread beat us to creating the CLD and installing // it into the loader while we were waiting for the lock. ! if (!is_unsafe_anonymous && loader.not_null()) { cld = java_lang_ClassLoader::loader_data_acquire(loader()); if (cld != NULL) { return cld; } } --- 178,196 ---- bool ClassLoaderDataGraph::_safepoint_cleanup_needed = false; bool ClassLoaderDataGraph::_metaspace_oom = false; // Add a new class loader data node to the list. Assign the newly created // ClassLoaderData into the java/lang/ClassLoader object as a hidden field ! ClassLoaderData* ClassLoaderDataGraph::add_to_graph(Handle loader, bool is_shortlived) { assert_lock_strong(ClassLoaderDataGraph_lock); ClassLoaderData* cld; // First check if another thread beat us to creating the CLD and installing // it into the loader while we were waiting for the lock. ! if (!is_shortlived && loader.not_null()) { cld = java_lang_ClassLoader::loader_data_acquire(loader()); if (cld != NULL) { return cld; } }
*** 198,215 **** // We mustn't GC until we've installed the ClassLoaderData in the Graph since the CLD // contains oops in _handles that must be walked. GC doesn't walk CLD from the // loader oop in all collections, particularly young collections. NoSafepointVerifier no_safepoints; ! cld = new ClassLoaderData(loader, is_unsafe_anonymous); // First install the new CLD to the Graph. cld->set_next(_head); _head = cld; // Next associate with the class_loader. ! if (!is_unsafe_anonymous) { // Use OrderAccess, since readers need to get the loader_data only after // it's added to the Graph java_lang_ClassLoader::release_set_loader_data(loader(), cld); } --- 198,215 ---- // We mustn't GC until we've installed the ClassLoaderData in the Graph since the CLD // contains oops in _handles that must be walked. GC doesn't walk CLD from the // loader oop in all collections, particularly young collections. NoSafepointVerifier no_safepoints; ! cld = new ClassLoaderData(loader, is_shortlived); // First install the new CLD to the Graph. cld->set_next(_head); _head = cld; // Next associate with the class_loader. ! if (!is_shortlived) { // Use OrderAccess, since readers need to get the loader_data only after // it's added to the Graph java_lang_ClassLoader::release_set_loader_data(loader(), cld); }
*** 223,235 **** ls.cr(); } return cld; } ! ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_unsafe_anonymous) { MutexLocker ml(ClassLoaderDataGraph_lock); ! ClassLoaderData* loader_data = add_to_graph(loader, is_unsafe_anonymous); return loader_data; } void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) { assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock); --- 223,235 ---- ls.cr(); } return cld; } ! ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_shortlived) { MutexLocker ml(ClassLoaderDataGraph_lock); ! ClassLoaderData* loader_data = add_to_graph(loader, is_shortlived); return loader_data; } void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) { assert_locked_or_safepoint_weak(ClassLoaderDataGraph_lock);
< prev index next >