< 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,107 **** if (init_free_ids) { _free_ids = new G1FreeIdSet(0, num_par_ids()); } } ! void G1DirtyCardQueueSet::handle_zero_index_for_thread(JavaThread* t) { G1ThreadLocalData::dirty_card_queue(t).handle_zero_index(); } bool G1DirtyCardQueueSet::apply_closure_to_buffer(G1CardTableEntryClosure* cl, BufferNode* node, --- 97,107 ---- if (init_free_ids) { _free_ids = new G1FreeIdSet(0, num_par_ids()); } } ! 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,219 **** } 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(); ) { G1ThreadLocalData::dirty_card_queue(t).reset(); } shared_dirty_card_queue()->reset(); } void G1DirtyCardQueueSet::concatenate_log(G1DirtyCardQueue& dcq) { if (!dcq.is_empty()) { --- 205,224 ---- } 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. ! 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,236 **** // 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)); } concatenate_log(_shared_dirty_card_queue); set_max_completed_buffers(old_limit); } --- 231,249 ---- // 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); ! ! 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 >