8066679: jvmtiRedefineClasses.cpp assert cache ptrs must match

Remove the assert and deallocate cashed class file bytes that are in collision

Reviewed-by: coleenp, dcubed
This commit is contained in:
Serguei Spitsyn 2015-04-07 20:18:28 -07:00
parent f84a0d02b9
commit 89256b01cb

View file

@ -3992,14 +3992,13 @@ void VM_RedefineClasses::redefine_single_class(jclass the_jclass,
// the_class doesn't have a cache yet so copy it // the_class doesn't have a cache yet so copy it
the_class->set_cached_class_file(scratch_class->get_cached_class_file()); the_class->set_cached_class_file(scratch_class->get_cached_class_file());
} }
#ifndef PRODUCT else if (scratch_class->get_cached_class_file_bytes() !=
else { the_class->get_cached_class_file_bytes()) {
assert(the_class->get_cached_class_file_bytes() == // The same class can be present twice in the scratch classes list or there
scratch_class->get_cached_class_file_bytes(), "cache ptrs must match"); // are multiple concurrent RetransformClasses calls on different threads.
assert(the_class->get_cached_class_file_len() == // In such cases we have to deallocate scratch_class cached_class_file_bytes.
scratch_class->get_cached_class_file_len(), "cache lens must match"); os::free(scratch_class->get_cached_class_file_bytes());
} }
#endif
// NULL out in scratch class to not delete twice. The class to be redefined // NULL out in scratch class to not delete twice. The class to be redefined
// always owns these bytes. // always owns these bytes.