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 |