hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 27674 00cabfc45357
parent 27478 0eedae0228ac
child 27880 afb974a04396
child 27694 543f6042c268
equal deleted inserted replaced
27673:df559a888b9f 27674:00cabfc45357
  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