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