comparison src/share/vm/classfile/metadataOnStackMark.cpp @ 13038:910026b800b8

8026946: JvmtiEnv::SetBreakpoint and JvmtiEnv::ClearBreakpoint should use MethodHandle 8026948: JvmtiEnv::SetBreakpoint and JvmtiEnv::ClearBreakpoint might not work with anonymous classes Summary: Walk methods in breakpoints for marking on stack so they aren't deallocated by redefine classes. Use class_holder rather than class_loader to keep GC from reclaiming class owning the method. Reviewed-by: sspitsyn, ehelin, sla
author coleenp
date Fri, 01 Nov 2013 10:32:36 -0400
parents 5daaddd917a1
children 0b9ea9a72436
comparison
equal deleted inserted replaced
13037:c8fc12209830 13038:910026b800b8
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "classfile/metadataOnStackMark.hpp" 26 #include "classfile/metadataOnStackMark.hpp"
27 #include "code/codeCache.hpp" 27 #include "code/codeCache.hpp"
28 #include "compiler/compileBroker.hpp" 28 #include "compiler/compileBroker.hpp"
29 #include "oops/metadata.hpp" 29 #include "oops/metadata.hpp"
30 #include "prims/jvmtiImpl.hpp"
30 #include "runtime/synchronizer.hpp" 31 #include "runtime/synchronizer.hpp"
31 #include "runtime/thread.hpp" 32 #include "runtime/thread.hpp"
32 #include "utilities/growableArray.hpp" 33 #include "utilities/growableArray.hpp"
33 34
34 35
46 _marked_objects = new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(1000, true); 47 _marked_objects = new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(1000, true);
47 } 48 }
48 Threads::metadata_do(Metadata::mark_on_stack); 49 Threads::metadata_do(Metadata::mark_on_stack);
49 CodeCache::alive_nmethods_do(nmethod::mark_on_stack); 50 CodeCache::alive_nmethods_do(nmethod::mark_on_stack);
50 CompileBroker::mark_on_stack(); 51 CompileBroker::mark_on_stack();
52 JvmtiCurrentBreakpoints::metadata_do(Metadata::mark_on_stack);
51 } 53 }
52 54
53 MetadataOnStackMark::~MetadataOnStackMark() { 55 MetadataOnStackMark::~MetadataOnStackMark() {
54 assert(SafepointSynchronize::is_at_safepoint(), "sanity check"); 56 assert(SafepointSynchronize::is_at_safepoint(), "sanity check");
55 // Unmark everything that was marked. Can't do the same walk because 57 // Unmark everything that was marked. Can't do the same walk because