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