< 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 >