< prev index next >

src/share/vm/gc_implementation/g1/concurrentMark.cpp

Print this page
rev 7970 : imported patch inc1

*** 2976,2985 **** --- 2976,2986 ---- }; class VerifyNoCSetOopsClosure : public OopClosure, public ObjectClosure { private: G1CollectedHeap* _g1h; + ConcurrentMark* _cm; VerifyNoCSetOopsPhase _phase; int _info; const char* phase_str() { switch (_phase) {
*** 2991,3007 **** } return NULL; } void do_object_work(oop obj) { guarantee(!_g1h->obj_in_cs(obj), err_msg("obj: "PTR_FORMAT" in CSet, phase: %s, info: %d", p2i((void*) obj), phase_str(), _info)); } public: ! VerifyNoCSetOopsClosure() : _g1h(G1CollectedHeap::heap()) { } void set_phase(VerifyNoCSetOopsPhase phase, int info = -1) { _phase = phase; _info = info; } --- 2992,3017 ---- } return NULL; } void do_object_work(oop obj) { + switch (_phase) { + case VerifyNoCSetOopsStack: + case VerifyNoCSetOopsQueues: + // Ignore reclaimed humongous object entries in mark stack and + // thread queues. + if (_cm->is_stale_humongous_marked_entry(obj)) break; + default: guarantee(!_g1h->obj_in_cs(obj), err_msg("obj: "PTR_FORMAT" in CSet, phase: %s, info: %d", p2i((void*) obj), phase_str(), _info)); } + } public: ! VerifyNoCSetOopsClosure(G1CollectedHeap* g1h, ConcurrentMark* cm) ! : _g1h(g1h), _cm(cm) { } void set_phase(VerifyNoCSetOopsPhase phase, int info = -1) { _phase = phase; _info = info; }
*** 3029,3039 **** assert(SafepointSynchronize::is_at_safepoint(), "should be at a safepoint"); if (!G1CollectedHeap::heap()->mark_in_progress()) { return; } ! VerifyNoCSetOopsClosure cl; if (verify_stacks) { // Verify entries on the global mark stack cl.set_phase(VerifyNoCSetOopsStack); _markStack.oops_do(&cl); --- 3039,3049 ---- assert(SafepointSynchronize::is_at_safepoint(), "should be at a safepoint"); if (!G1CollectedHeap::heap()->mark_in_progress()) { return; } ! VerifyNoCSetOopsClosure cl(_g1h, this); if (verify_stacks) { // Verify entries on the global mark stack cl.set_phase(VerifyNoCSetOopsStack); _markStack.oops_do(&cl);
*** 3404,3413 **** --- 3414,3424 ---- } #endif void CMTask::scan_object(oop obj) { assert(_nextMarkBitMap->isMarked((HeapWord*) obj), "invariant"); + assert(!_g1h->is_on_master_free_list(_g1h->heap_region_containing(obj)), "invariant"); if (_cm->verbose_high()) { gclog_or_tty->print_cr("[%u] we're scanning object "PTR_FORMAT, _worker_id, p2i((void*) obj)); }
*** 3816,3834 **** if (_cm->verbose_high()) { gclog_or_tty->print_cr("[%u] popped "PTR_FORMAT, _worker_id, p2i((void*) obj)); } ! assert(_g1h->is_in_g1_reserved((HeapWord*) obj), "invariant" ); ! ! if (is_stale_humongous_queue_entry(obj)) { ! statsOnly( ++stale_humongous_queue_entries ); ! } else { ! assert(!_g1h->is_on_master_free_list( ! _g1h->heap_region_containing(obj)), "invariant"); ! scan_object(obj); ! } if (_task_queue->size() <= target_size || has_aborted()) { ret = false; } else { ret = _task_queue->pop_local(obj); --- 3827,3837 ---- if (_cm->verbose_high()) { gclog_or_tty->print_cr("[%u] popped "PTR_FORMAT, _worker_id, p2i((void*) obj)); } ! process_queue_entry(obj); if (_task_queue->size() <= target_size || has_aborted()) { ret = false; } else { ret = _task_queue->pop_local(obj);
*** 4328,4345 **** gclog_or_tty->print_cr("[%u] stolen "PTR_FORMAT" successfully", _worker_id, p2i((void*) obj)); } statsOnly( ++_steals ); ! ! if (is_stale_humongous_queue_entry(obj)) { ! statsOnly( ++stale_humongous_queue_entries ); ! } else { ! assert(_nextMarkBitMap->isMarked((HeapWord*) obj), ! "any stolen object should be marked"); ! scan_object(obj); ! } // And since we're towards the end, let's totally drain the // local queue and global stack. drain_local_queue(false); drain_global_stack(false); --- 4331,4341 ---- gclog_or_tty->print_cr("[%u] stolen "PTR_FORMAT" successfully", _worker_id, p2i((void*) obj)); } statsOnly( ++_steals ); ! process_queue_entry(obj); // And since we're towards the end, let's totally drain the // local queue and global stack. drain_local_queue(false); drain_global_stack(false);
< prev index next >