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