< prev index next >
src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
Print this page
rev 55389 : [mq]: satb_lock_free
*** 2417,2431 ****
while (!has_aborted() &&
satb_mq_set.apply_closure_to_completed_buffer(&satb_cl)) {
abort_marking_if_regular_check_fail();
}
! _draining_satb_buffers = false;
! assert(has_aborted() ||
! _cm->concurrent() ||
! satb_mq_set.completed_buffers_num() == 0, "invariant");
// again, this was a potentially expensive operation, decrease the
// limits to get the regular clock call early
decrease_limits();
}
--- 2417,2432 ----
while (!has_aborted() &&
satb_mq_set.apply_closure_to_completed_buffer(&satb_cl)) {
abort_marking_if_regular_check_fail();
}
! // Can't assert qset is empty here, even if not aborted. If concurrent,
! // some other thread might be adding to the queue. If not concurrent,
! // some other thread might have won the race for the last buffer, but
! // has not yet decremented the count.
! _draining_satb_buffers = false;
// again, this was a potentially expensive operation, decrease the
// limits to get the regular clock call early
decrease_limits();
}
< prev index next >