hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp
changeset 20065 59ad80fc24f9
parent 20022 e6e3f5ff6d73
parent 20059 c26474fd5ac0
child 20378 a296c8e1c5d2
equal deleted inserted replaced
20024:5c23a187610b 20065:59ad80fc24f9
  2805                                         _matching_new_methods,
  2805                                         _matching_new_methods,
  2806                                         _matching_methods_length,
  2806                                         _matching_methods_length,
  2807                                         &trace_name_printed);
  2807                                         &trace_name_printed);
  2808       }
  2808       }
  2809     }
  2809     }
  2810     {
  2810 
  2811       ResourceMark rm(_thread);
  2811     // the previous versions' constant pool caches may need adjustment
  2812       // PreviousVersionInfo objects returned via PreviousVersionWalker
  2812     PreviousVersionWalker pvw(_thread, ik);
  2813       // contain a GrowableArray of handles. We have to clean up the
  2813     for (PreviousVersionNode * pv_node = pvw.next_previous_version();
  2814       // GrowableArray _after_ the PreviousVersionWalker destructor
  2814          pv_node != NULL; pv_node = pvw.next_previous_version()) {
  2815       // has destroyed the handles.
  2815       other_cp = pv_node->prev_constant_pool();
  2816       {
  2816       cp_cache = other_cp->cache();
  2817         // the previous versions' constant pool caches may need adjustment
  2817       if (cp_cache != NULL) {
  2818         PreviousVersionWalker pvw(ik);
  2818         cp_cache->adjust_method_entries(_matching_old_methods,
  2819         for (PreviousVersionInfo * pv_info = pvw.next_previous_version();
  2819                                         _matching_new_methods,
  2820              pv_info != NULL; pv_info = pvw.next_previous_version()) {
  2820                                         _matching_methods_length,
  2821           other_cp = pv_info->prev_constant_pool_handle();
  2821                                         &trace_name_printed);
  2822           cp_cache = other_cp->cache();
  2822       }
  2823           if (cp_cache != NULL) {
  2823     }
  2824             cp_cache->adjust_method_entries(_matching_old_methods,
       
  2825                                             _matching_new_methods,
       
  2826                                             _matching_methods_length,
       
  2827                                             &trace_name_printed);
       
  2828           }
       
  2829         }
       
  2830       } // pvw is cleaned up
       
  2831     } // rm is cleaned up
       
  2832   }
  2824   }
  2833 }
  2825 }
  2834 
  2826 
  2835 void VM_RedefineClasses::update_jmethod_ids() {
  2827 void VM_RedefineClasses::update_jmethod_ids() {
  2836   for (int j = 0; j < _matching_methods_length; ++j) {
  2828   for (int j = 0; j < _matching_methods_length; ++j) {
  2940       obsolete_count++;
  2932       obsolete_count++;
  2941 
  2933 
  2942       // obsolete methods need a unique idnum
  2934       // obsolete methods need a unique idnum
  2943       u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum();
  2935       u2 num = InstanceKlass::cast(_the_class_oop)->next_method_idnum();
  2944       if (num != ConstMethod::UNSET_IDNUM) {
  2936       if (num != ConstMethod::UNSET_IDNUM) {
  2945 //      u2 old_num = old_method->method_idnum();
       
  2946         old_method->set_method_idnum(num);
  2937         old_method->set_method_idnum(num);
  2947 // TO DO: attach obsolete annotations to obsolete method's new idnum
  2938       }
  2948       }
  2939 
  2949       // With tracing we try not to "yack" too much. The position of
  2940       // With tracing we try not to "yack" too much. The position of
  2950       // this trace assumes there are fewer obsolete methods than
  2941       // this trace assumes there are fewer obsolete methods than
  2951       // EMCP methods.
  2942       // EMCP methods.
  2952       RC_TRACE(0x00000100, ("mark %s(%s) as obsolete",
  2943       RC_TRACE(0x00000100, ("mark %s(%s) as obsolete",
  2953         old_method->name()->as_C_string(),
  2944         old_method->name()->as_C_string(),