comparison src/share/vm/oops/klassVtable.cpp @ 610:70998f2e05ef

6805864: 4/3 Problem with jvmti->redefineClasses: some methods don't get redefined Summary: Remove incorrect optimization in klassItable::adjust_method_entries(). Add RedefineClasses() tracing support for obsolete method entry. Reviewed-by: acorn, swamyv
author dcubed
date Mon, 02 Mar 2009 14:03:03 -0700
parents d1605aabd0a1
children 4aaa9f5e02a8 c89f86385056
comparison
equal deleted inserted replaced
609:ea20d7ce26b0 610:70998f2e05ef
990 for (int j = 0; j < methods_length; j++) { 990 for (int j = 0; j < methods_length; j++) {
991 methodOop old_method = old_methods[j]; 991 methodOop old_method = old_methods[j];
992 methodOop new_method = new_methods[j]; 992 methodOop new_method = new_methods[j];
993 itableMethodEntry* ime = method_entry(0); 993 itableMethodEntry* ime = method_entry(0);
994 994
995 // The itable can describe more than one interface and the same
996 // method signature can be specified by more than one interface.
997 // This means we have to do an exhaustive search to find all the
998 // old_method references.
995 for (int i = 0; i < _size_method_table; i++) { 999 for (int i = 0; i < _size_method_table; i++) {
996 if (ime->method() == old_method) { 1000 if (ime->method() == old_method) {
997 ime->initialize(new_method); 1001 ime->initialize(new_method);
998 1002
999 if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { 1003 if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) {
1006 // RC_TRACE macro has an embedded ResourceMark 1010 // RC_TRACE macro has an embedded ResourceMark
1007 RC_TRACE(0x00200000, ("itable method update: %s(%s)", 1011 RC_TRACE(0x00200000, ("itable method update: %s(%s)",
1008 new_method->name()->as_C_string(), 1012 new_method->name()->as_C_string(),
1009 new_method->signature()->as_C_string())); 1013 new_method->signature()->as_C_string()));
1010 } 1014 }
1011 break;
1012 } 1015 }
1013 ime++; 1016 ime++;
1014 } 1017 }
1015 } 1018 }
1016 } 1019 }