hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 40102 23ff468d69b4
parent 40016 bf6fcd467a7b
child 40655 9f644073d3a0
equal deleted inserted replaced
40101:3b8101f0fd65 40102:23ff468d69b4
  2735     return best;
  2735     return best;
  2736   }
  2736   }
  2737   return NULL;
  2737   return NULL;
  2738 }
  2738 }
  2739 
  2739 
  2740 oop InstanceKlass::add_member_name(Handle mem_name, bool intern) {
  2740 bool InstanceKlass::add_member_name(Handle mem_name) {
  2741   jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
  2741   jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
  2742   MutexLocker ml(MemberNameTable_lock);
  2742   MutexLocker ml(MemberNameTable_lock);
  2743   DEBUG_ONLY(NoSafepointVerifier nsv);
  2743   DEBUG_ONLY(NoSafepointVerifier nsv);
  2744 
  2744 
  2745   // Check if method has been redefined while taking out MemberNameTable_lock, if so
  2745   // Check if method has been redefined while taking out MemberNameTable_lock, if so
  2746   // return false.  We cannot cache obsolete methods. They will crash when the function
  2746   // return false.  We cannot cache obsolete methods. They will crash when the function
  2747   // is called!
  2747   // is called!
  2748   Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
  2748   Method* method = (Method*)java_lang_invoke_MemberName::vmtarget(mem_name());
  2749   if (method->is_obsolete()) {
  2749   if (method->is_obsolete()) {
  2750     return NULL;
  2750     return false;
  2751   } else if (method->is_old()) {
  2751   } else if (method->is_old()) {
  2752     // Replace method with redefined version
  2752     // Replace method with redefined version
  2753     java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
  2753     java_lang_invoke_MemberName::set_vmtarget(mem_name(), method_with_idnum(method->method_idnum()));
  2754   }
  2754   }
  2755 
  2755 
  2756   if (_member_names == NULL) {
  2756   if (_member_names == NULL) {
  2757     _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
  2757     _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
  2758   }
  2758   }
  2759   if (intern) {
  2759   _member_names->add_member_name(mem_name_wref);
  2760     return _member_names->find_or_add_member_name(mem_name_wref);
  2760   return true;
  2761   } else {
       
  2762     return _member_names->add_member_name(mem_name_wref);
       
  2763   }
       
  2764 }
  2761 }
  2765 
  2762 
  2766 // -----------------------------------------------------------------------------------------------------
  2763 // -----------------------------------------------------------------------------------------------------
  2767 // Printing
  2764 // Printing
  2768 
  2765