Mercurial > hg > graal-jvmci-8
changeset 22942:5b2cd065dfc6
8066679: jvmtiRedefineClasses.cpp assert cache ptrs must match
Summary: remove the assert and deallocate cashed class file bytes that are in collision
Reviewed-by: coleenp, dcubed
author | sspitsyn |
---|---|
date | Thu, 09 Apr 2015 17:04:24 -0700 |
parents | e3d76b57a655 |
children | 2163da41681e |
files | src/share/vm/prims/jvmtiRedefineClasses.cpp |
diffstat | 1 files changed, 6 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/prims/jvmtiRedefineClasses.cpp Thu Apr 09 16:41:40 2015 +0000 +++ b/src/share/vm/prims/jvmtiRedefineClasses.cpp Thu Apr 09 17:04:24 2015 -0700 @@ -3979,14 +3979,13 @@ // the_class doesn't have a cache yet so copy it the_class->set_cached_class_file(scratch_class->get_cached_class_file()); } -#ifndef PRODUCT - else { - assert(the_class->get_cached_class_file_bytes() == - scratch_class->get_cached_class_file_bytes(), "cache ptrs must match"); - assert(the_class->get_cached_class_file_len() == - scratch_class->get_cached_class_file_len(), "cache lens must match"); + else if (scratch_class->get_cached_class_file_bytes() != + the_class->get_cached_class_file_bytes()) { + // The same class can be present twice in the scratch classes list or there + // are multiple concurrent RetransformClasses calls on different threads. + // In such cases we have to deallocate scratch_class cached_class_file_bytes. + os::free(scratch_class->get_cached_class_file_bytes()); } -#endif // NULL out in scratch class to not delete twice. The class to be redefined // always owns these bytes.