2929 return best; |
2929 return best; |
2930 } |
2930 } |
2931 return NULL; |
2931 return NULL; |
2932 } |
2932 } |
2933 |
2933 |
2934 void InstanceKlass::add_member_name(int index, Handle mem_name) { |
2934 bool InstanceKlass::add_member_name(Handle mem_name) { |
2935 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); |
2935 jweak mem_name_wref = JNIHandles::make_weak_global(mem_name); |
2936 MutexLocker ml(MemberNameTable_lock); |
2936 MutexLocker ml(MemberNameTable_lock); |
2937 assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds"); |
|
2938 DEBUG_ONLY(No_Safepoint_Verifier nsv); |
2937 DEBUG_ONLY(No_Safepoint_Verifier nsv); |
|
2938 |
|
2939 // Check if method has been redefined while taking out MemberNameTable_lock, if so |
|
2940 // return false. We cannot cache obsolete methods. They will crash when the function |
|
2941 // is called! |
|
2942 Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name()); |
|
2943 if (method->is_obsolete()) { |
|
2944 return false; |
|
2945 } else if (method->is_old()) { |
|
2946 // Replace method with redefined version |
|
2947 java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum())); |
|
2948 } |
2939 |
2949 |
2940 if (_member_names == NULL) { |
2950 if (_member_names == NULL) { |
2941 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count()); |
2951 _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count()); |
2942 } |
2952 } |
2943 _member_names->add_member_name(index, mem_name_wref); |
2953 _member_names->add_member_name(mem_name_wref); |
2944 } |
2954 return true; |
2945 |
|
2946 oop InstanceKlass::get_member_name(int index) { |
|
2947 MutexLocker ml(MemberNameTable_lock); |
|
2948 assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds"); |
|
2949 DEBUG_ONLY(No_Safepoint_Verifier nsv); |
|
2950 |
|
2951 if (_member_names == NULL) { |
|
2952 return NULL; |
|
2953 } |
|
2954 oop mem_name =_member_names->get_member_name(index); |
|
2955 return mem_name; |
|
2956 } |
2955 } |
2957 |
2956 |
2958 // ----------------------------------------------------------------------------------------------------- |
2957 // ----------------------------------------------------------------------------------------------------- |
2959 // Printing |
2958 // Printing |
2960 |
2959 |