< prev index next >

src/share/vm/gc/shenandoah/shenandoahConcurrentMark.cpp

Print this page
rev 12724 : Assert code roots are to-space ptrs when scanning/updating other roots.

*** 40,49 **** --- 40,66 ---- #include "classfile/systemDictionary.hpp" #include "memory/iterator.inline.hpp" #include "oops/oop.inline.hpp" #include "gc/shared/taskqueue.inline.hpp" + #ifdef ASSERT + class AssertToSpaceClosure : public OopClosure { + private: + template <class T> + inline void do_oop_nv(T* p) { + T o = oopDesc::load_heap_oop(p); + if (! oopDesc::is_null(o)) { + oop obj = oopDesc::decode_heap_oop_not_null(o); + assert(oopDesc::unsafe_equals(obj, ShenandoahBarrierSet::resolve_oop_static_not_null(obj)), "need to-space object here"); + } + } + public: + void do_oop(narrowOop* p) { do_oop_nv(p); } + void do_oop(oop* p) { do_oop_nv(p); } + }; + #endif + class ShenandoahInitMarkRootsClosure : public OopClosure { private: SCMObjToScanQueue* _queue; ShenandoahHeap* _heap;
*** 133,143 **** ResourceMark m; if (heap->concurrentMark()->unload_classes()) { _rp->process_strong_roots(&mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, &blobsCl, worker_id); } else { ! _rp->process_all_roots(&mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, ShenandoahConcurrentCodeRoots ? NULL : &blobsCl, worker_id); } } }; class ShenandoahUpdateRootsTask : public AbstractGangTask { --- 150,173 ---- ResourceMark m; if (heap->concurrentMark()->unload_classes()) { _rp->process_strong_roots(&mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, &blobsCl, worker_id); } else { ! if (ShenandoahConcurrentCodeRoots) { ! CodeBlobClosure* code_blobs; ! #ifdef ASSERT ! AssertToSpaceClosure assert_to_space_oops; ! CodeBlobToOopClosure assert_to_space(&assert_to_space_oops, ! !CodeBlobToOopClosure::FixRelocations); ! code_blobs = &assert_to_space; ! #else ! code_blobs = NULL; ! #endif ! _rp->process_all_roots(&mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, code_blobs, worker_id); ! } else { ! _rp->process_all_roots(&mark_cl, _process_refs ? NULL : &mark_cl, &cldCl, &blobsCl, worker_id); ! } } } }; class ShenandoahUpdateRootsTask : public AbstractGangTask {
*** 154,164 **** ShenandoahHeap* heap = ShenandoahHeap::heap(); SCMUpdateRefsClosure cl; CLDToOopClosure cldCl(&cl); ! _rp->process_all_roots(&cl, &cl, &cldCl, NULL, worker_id); } }; class SCMConcurrentMarkingTask : public AbstractGangTask { private: --- 184,202 ---- ShenandoahHeap* heap = ShenandoahHeap::heap(); SCMUpdateRefsClosure cl; CLDToOopClosure cldCl(&cl); ! CodeBlobClosure* code_blobs; ! #ifdef ASSERT ! AssertToSpaceClosure assert_to_space_oops; ! CodeBlobToOopClosure assert_to_space(&assert_to_space_oops, !CodeBlobToOopClosure::FixRelocations); ! code_blobs = &assert_to_space; ! #else ! code_blobs = NULL; ! #endif ! _rp->process_all_roots(&cl, &cl, &cldCl, code_blobs, worker_id); } }; class SCMConcurrentMarkingTask : public AbstractGangTask { private:
< prev index next >