< prev index next >

src/hotspot/share/oops/instanceKlass.cpp

Print this page

        

*** 684,702 **** bool InstanceKlass::verify_code(TRAPS) { // 1) Verify the bytecodes return Verifier::verify(this, should_verify_class(), THREAD); } - - // Used exclusively by the shared spaces dump mechanism to prevent - // classes mapped into the shared regions in new VMs from appearing linked. - - void InstanceKlass::unlink_class() { - assert(is_linked(), "must be linked"); - _init_state = loaded; - } - void InstanceKlass::link_class(TRAPS) { assert(is_loaded(), "must be loaded"); if (!is_linked()) { link_class_impl(CHECK); } --- 684,693 ----
*** 2298,2311 **** // is_linked() is true. // If there's a linking error, there is nothing else to remove. return; } ! // Unlink the class ! if (is_linked()) { ! unlink_class(); ! } { MutexLocker ml(Compile_lock); init_implementor(); } --- 2289,2304 ---- // is_linked() is true. // If there's a linking error, there is nothing else to remove. return; } ! // Reset to the 'allocated' state to prevent any premature accessing to ! // a shared class at runtime while the class is still being loaded and ! // restored. A class' init_state is set to 'loaded' at runtime when it's ! // being added to class hierarchy (see SystemDictionary:::add_to_hierarchy()). ! _init_state = allocated; ! { MutexLocker ml(Compile_lock); init_implementor(); }
*** 2348,2357 **** --- 2341,2354 ---- array_klasses()->remove_java_mirror(); } } void InstanceKlass::restore_unshareable_info(ClassLoaderData* loader_data, Handle protection_domain, TRAPS) { + // SystemDictionary::add_to_hierarchy() sets the init_state to loaded + // before the InstanceKlass is added to the SystemDictionary. Make + // sure the current state is <loaded. + assert(!is_loaded(), "invalid init state"); set_package(loader_data, CHECK); Klass::restore_unshareable_info(loader_data, protection_domain, CHECK); Array<Method*>* methods = this->methods(); int num_methods = methods->length();
< prev index next >