src/share/vm/oops/instanceKlass.cpp

changeset 8951
0612a789929b
parent 8509
cb4af293fe70
child 8982
8f1acbb637e3
equal deleted inserted replaced
8950:0b3b35f008f2 8951:0612a789929b
3016 return best; 3016 return best;
3017 } 3017 }
3018 return NULL; 3018 return NULL;
3019 } 3019 }
3020 3020
3021 bool InstanceKlass::add_member_name(Handle mem_name) { 3021 oop InstanceKlass::add_member_name(Handle mem_name, bool intern) {
3022 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); 3022 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
3023 MutexLocker ml(MemberNameTable_lock); 3023 MutexLocker ml(MemberNameTable_lock);
3024 DEBUG_ONLY(No_Safepoint_Verifier nsv); 3024 DEBUG_ONLY(No_Safepoint_Verifier nsv);
3025 3025
3026 // Check if method has been redefined while taking out MemberNameTable_lock, if so 3026 // Check if method has been redefined while taking out MemberNameTable_lock, if so
3027 // return false. We cannot cache obsolete methods. They will crash when the function 3027 // return false. We cannot cache obsolete methods. They will crash when the function
3028 // is called! 3028 // is called!
3029 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name()); 3029 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
3030 if (method->is_obsolete()) { 3030 if (method->is_obsolete()) {
3031 return false; 3031 return NULL;
3032 } else if (method->is_old()) { 3032 } else if (method->is_old()) {
3033 // Replace method with redefined version 3033 // Replace method with redefined version
3034 java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum())); 3034 java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
3035 } 3035 }
3036 3036
3037 if (_member_names == NULL) { 3037 if (_member_names == NULL) {
3038 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count()); 3038 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
3039 } 3039 }
3040 _member_names->add_member_name(mem_name_wref); 3040 if (intern) {
3041 return true; 3041 return _member_names->find_or_add_member_name(mem_name_wref);
3042 } else {
3043 return _member_names->add_member_name(mem_name_wref);
3044 }
3042 } 3045 }
3043 3046
3044 // ----------------------------------------------------------------------------------------------------- 3047 // -----------------------------------------------------------------------------------------------------
3045 // Printing 3048 // Printing
3046 3049

mercurial