src/share/vm/prims/jvmtiRedefineClasses.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/prims/jvmtiRedefineClasses.cpp Wed Apr 15 12:03:18 2015
--- new/src/share/vm/prims/jvmtiRedefineClasses.cpp Wed Apr 15 12:03:18 2015
*** 609,620 ****
--- 609,620 ----
// Check superclasses, or rather their names, since superclasses themselves can be
// requested to replace.
// Check for NULL superclass first since this might be java.lang.Object
if (the_class->super() != scratch_class->super() &&
(the_class->super() == NULL || scratch_class->super() == NULL ||
! the_class->super()->name() !=
! scratch_class->super()->name())) {
! the_class->super()->name()->not_equals(
! scratch_class->super()->name()))) {
return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED;
}
// Check if the number, names and order of directly implemented interfaces are the same.
// I think in principle we should just check if the sets of names of directly implemented
*** 628,639 ****
--- 628,639 ----
int n_intfs = k_interfaces->length();
if (n_intfs != k_new_interfaces->length()) {
return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED;
}
for (i = 0; i < n_intfs; i++) {
! if (k_interfaces->at(i)->name() !=
! k_new_interfaces->at(i)->name()) {
! if (k_interfaces->at(i)->name()->not_equals(
! k_new_interfaces->at(i)->name())) {
return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED;
}
}
// Check whether class is in the error init state.
*** 667,677 ****
--- 667,677 ----
// name and signature
Symbol* name_sym1 = the_class->constants()->symbol_at(old_fs.name_index());
Symbol* sig_sym1 = the_class->constants()->symbol_at(old_fs.signature_index());
Symbol* name_sym2 = scratch_class->constants()->symbol_at(new_fs.name_index());
Symbol* sig_sym2 = scratch_class->constants()->symbol_at(new_fs.signature_index());
! if (name_sym1 != name_sym2 || sig_sym1 != sig_sym2) {
! if (name_sym1->not_equals(name_sym2) || sig_sym1->not_equals(sig_sym2)) {
return JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED;
}
}
// If both streams aren't done then we have a differing number of
*** 723,755 ****
--- 723,755 ----
method_was = deleted;
} else {
// There are more methods in both the old and new lists
k_old_method = k_old_methods->at(oi);
k_new_method = k_new_methods->at(ni);
! if (k_old_method->name() != k_new_method->name()) {
! if (k_old_method->name()->not_equals(k_new_method->name())) {
// Methods are sorted by method name, so a mismatch means added
// or deleted
if (k_old_method->name()->fast_compare(k_new_method->name()) > 0) {
method_was = added;
} else {
method_was = deleted;
}
! } else if (k_old_method->signature() == k_new_method->signature()) {
! } else if (k_old_method->signature()->equals(k_new_method->signature())) {
// Both the name and signature match
method_was = matched;
} else {
// The name matches, but the signature doesn't, which means we have to
// search forward through the new overloaded methods.
int nj; // outside the loop for post-loop check
for (nj = ni + 1; nj < n_new_methods; nj++) {
Method* m = k_new_methods->at(nj);
! if (k_old_method->name() != m->name()) {
! if (k_old_method->name()->not_equals(m->name())) {
// reached another method name so no more overloaded methods
method_was = deleted;
break;
}
! if (k_old_method->signature() == m->signature()) {
! if (k_old_method->signature()->equals(m->signature())) {
// found a match so swap the methods
k_new_methods->at_put(ni, m);
k_new_methods->at_put(nj, k_new_method);
k_new_method = m;
method_was = matched;
*** 1008,1027 ****
--- 1008,1027 ----
// RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
RC_TRACE_WITH_THREAD(0x00000002, THREAD, ("parse_stream exception: '%s'",
ex_name->as_C_string()));
CLEAR_PENDING_EXCEPTION;
! if (ex_name == vmSymbols::java_lang_UnsupportedClassVersionError()) {
! if (ex_name->equals(vmSymbols::java_lang_UnsupportedClassVersionError())) {
return JVMTI_ERROR_UNSUPPORTED_VERSION;
! } else if (ex_name == vmSymbols::java_lang_ClassFormatError()) {
! } else if (ex_name->equals(vmSymbols::java_lang_ClassFormatError())) {
return JVMTI_ERROR_INVALID_CLASS_FORMAT;
! } else if (ex_name == vmSymbols::java_lang_ClassCircularityError()) {
! } else if (ex_name->equals(vmSymbols::java_lang_ClassCircularityError())) {
return JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION;
! } else if (ex_name == vmSymbols::java_lang_NoClassDefFoundError()) {
! } else if (ex_name->equals(vmSymbols::java_lang_NoClassDefFoundError())) {
// The message will be "XXX (wrong name: YYY)"
return JVMTI_ERROR_NAMES_DONT_MATCH;
! } else if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) {
! } else if (ex_name->equals(vmSymbols::java_lang_OutOfMemoryError())) {
return JVMTI_ERROR_OUT_OF_MEMORY;
} else { // Just in case more exceptions can be thrown..
return JVMTI_ERROR_FAILS_VERIFICATION;
}
}
*** 1033,1043 ****
--- 1033,1043 ----
Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
// RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
RC_TRACE_WITH_THREAD(0x00000002, THREAD, ("link_class exception: '%s'",
ex_name->as_C_string()));
CLEAR_PENDING_EXCEPTION;
! if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) {
! if (ex_name->equals(vmSymbols::java_lang_OutOfMemoryError())) {
return JVMTI_ERROR_OUT_OF_MEMORY;
} else {
return JVMTI_ERROR_INTERNAL;
}
}
*** 1071,1081 ****
--- 1071,1081 ----
Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
// RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
RC_TRACE_WITH_THREAD(0x00000002, THREAD,
("verify_byte_codes exception: '%s'", ex_name->as_C_string()));
CLEAR_PENDING_EXCEPTION;
! if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) {
! if (ex_name->equals(vmSymbols::java_lang_OutOfMemoryError())) {
return JVMTI_ERROR_OUT_OF_MEMORY;
} else {
// tell the caller the bytecodes are bad
return JVMTI_ERROR_FAILS_VERIFICATION;
}
*** 1086,1096 ****
--- 1086,1096 ----
Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
// RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
RC_TRACE_WITH_THREAD(0x00000002, THREAD,
("merge_cp_and_rewrite exception: '%s'", ex_name->as_C_string()));
CLEAR_PENDING_EXCEPTION;
! if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) {
! if (ex_name->equals(vmSymbols::java_lang_OutOfMemoryError())) {
return JVMTI_ERROR_OUT_OF_MEMORY;
} else {
return JVMTI_ERROR_INTERNAL;
}
}
*** 1107,1117 ****
--- 1107,1117 ----
// RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
RC_TRACE_WITH_THREAD(0x00000002, THREAD,
("verify_byte_codes post merge-CP exception: '%s'",
ex_name->as_C_string()));
CLEAR_PENDING_EXCEPTION;
! if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) {
! if (ex_name->equals(vmSymbols::java_lang_OutOfMemoryError())) {
return JVMTI_ERROR_OUT_OF_MEMORY;
} else {
// tell the caller that constant pool merging screwed up
return JVMTI_ERROR_INTERNAL;
}
*** 1126,1136 ****
--- 1126,1136 ----
Symbol* ex_name = PENDING_EXCEPTION->klass()->name();
// RC_TRACE_WITH_THREAD macro has an embedded ResourceMark
RC_TRACE_WITH_THREAD(0x00000002, THREAD,
("Rewriter::rewrite or link_methods exception: '%s'", ex_name->as_C_string()));
CLEAR_PENDING_EXCEPTION;
! if (ex_name == vmSymbols::java_lang_OutOfMemoryError()) {
! if (ex_name->equals(vmSymbols::java_lang_OutOfMemoryError())) {
return JVMTI_ERROR_OUT_OF_MEMORY;
} else {
return JVMTI_ERROR_INTERNAL;
}
}
*** 3808,3819 ****
--- 3808,3819 ----
_deleted_methods[_deleted_methods_length++] = old_method;
++oj;
} else {
old_method = _old_methods->at(oj);
new_method = _new_methods->at(nj);
! if (old_method->name() == new_method->name()) {
! if (old_method->signature() == new_method->signature()) {
! if (old_method->name()->equals(new_method->name())) {
! if (old_method->signature()->equals(new_method->signature())) {
_matching_old_methods[_matching_methods_length ] = old_method;
_matching_new_methods[_matching_methods_length++] = new_method;
++nj;
++oj;
} else {
src/share/vm/prims/jvmtiRedefineClasses.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File