< prev index next >

src/hotspot/share/gc/g1/g1DirtyCardQueue.cpp

Print this page
rev 53864 : imported patch queue_access
rev 53865 : imported patch njt_iterate

@@ -97,11 +97,11 @@
   if (init_free_ids) {
     _free_ids = new G1FreeIdSet(0, num_par_ids());
   }
 }
 
-void G1DirtyCardQueueSet::handle_zero_index_for_thread(JavaThread* t) {
+void G1DirtyCardQueueSet::handle_zero_index_for_thread(Thread* t) {
   G1ThreadLocalData::dirty_card_queue(t).handle_zero_index();
 }
 
 bool G1DirtyCardQueueSet::apply_closure_to_buffer(G1CardTableEntryClosure* cl,
                                                   BufferNode* node,

@@ -205,15 +205,20 @@
 }
 
 void G1DirtyCardQueueSet::abandon_logs() {
   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
   abandon_completed_buffers();
+
   // Since abandon is done only at safepoints, we can safely manipulate
   // these queues.
-  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
+  struct AbandonThreadLogClosure : public ThreadClosure {
+    virtual void do_thread(Thread* t) {
     G1ThreadLocalData::dirty_card_queue(t).reset();
   }
+  } closure;
+  Threads::threads_do(&closure);
+
   shared_dirty_card_queue()->reset();
 }
 
 void G1DirtyCardQueueSet::concatenate_log(G1DirtyCardQueue& dcq) {
   if (!dcq.is_empty()) {

@@ -226,11 +231,19 @@
   // the global list of logs.  Temporarily turn off the limit on the number
   // of outstanding buffers.
   assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
   size_t old_limit = max_completed_buffers();
   set_max_completed_buffers(MaxCompletedBuffersUnlimited);
-  for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) {
-    concatenate_log(G1ThreadLocalData::dirty_card_queue(t));
+
+  class ConcatenateThreadLogClosure : public ThreadClosure {
+    G1DirtyCardQueueSet* _qset;
+  public:
+    ConcatenateThreadLogClosure(G1DirtyCardQueueSet* qset) : _qset(qset) {}
+    virtual void do_thread(Thread* t) {
+      _qset->concatenate_log(G1ThreadLocalData::dirty_card_queue(t));
   }
+  } closure(this);
+  Threads::threads_do(&closure);
+
   concatenate_log(_shared_dirty_card_queue);
   set_max_completed_buffers(old_limit);
 }
< prev index next >