< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
Print this page
rev 49075 : Make Traversal share code with conc-mark
@@ -438,10 +438,11 @@
template <class T, bool DO_SATB>
void ShenandoahTraversalGC::main_loop_work(T* cl, jushort* live_data, uint worker_id, ParallelTaskTerminator* terminator) {
ShenandoahObjToScanQueueSet* queues = task_queues();
ShenandoahObjToScanQueue* q = queues->queue(worker_id);
+ ShenandoahConcurrentMark* conc_mark = _heap->concurrentMark();
uintx stride = ShenandoahMarkLoopStride;
ShenandoahMarkTask task;
@@ -456,11 +457,11 @@
for (uint i = 0; i < stride; i++) {
if (q->pop_buffer(task) ||
q->pop_local(task) ||
q->pop_overflow(task)) {
- do_task(q, cl, live_data, &task);
+ conc_mark->do_task<T, true>(q, cl, live_data, &task);
} else {
assert(q->is_empty(), "Must be empty");
q = queues->claim_next();
break;
}
@@ -480,11 +481,11 @@
if ((q->pop_buffer(task) ||
q->pop_local(task) ||
q->pop_overflow(task) ||
(DO_SATB && satb_mq_set.apply_closure_to_completed_buffer(&satb_cl) && q->pop_buffer(task)) ||
queues->steal(worker_id, &seed, task))) {
- do_task(q, cl, live_data, &task);
+ conc_mark->do_task<T, true>(q, cl, live_data, &task);
} else {
if (terminator->offer_termination()) return;
}
}
}
< prev index next >