src/hotspot/share/utilities/globalCounter.cpp
changeset 51405 8b23aa7cef47
parent 50429 83aec1d357d4
child 51511 eb8d5aeabab3
equal deleted inserted replaced
51404:c5461fe16efb 51405:8b23aa7cef47
    59 void GlobalCounter::write_synchronize() {
    59 void GlobalCounter::write_synchronize() {
    60   assert((*Thread::current()->get_rcu_counter() & COUNTER_ACTIVE) == 0x0, "must be outside a critcal section");
    60   assert((*Thread::current()->get_rcu_counter() & COUNTER_ACTIVE) == 0x0, "must be outside a critcal section");
    61   // Atomic::add must provide fence since we have storeload dependency.
    61   // Atomic::add must provide fence since we have storeload dependency.
    62   volatile uintx gbl_cnt = Atomic::add((uintx)COUNTER_INCREMENT, &_global_counter._counter,
    62   volatile uintx gbl_cnt = Atomic::add((uintx)COUNTER_INCREMENT, &_global_counter._counter,
    63                                        memory_order_conservative);
    63                                        memory_order_conservative);
       
    64   // Handle bootstrap
       
    65   if (Threads::number_of_threads() == 0) {
       
    66     return;
       
    67   }
       
    68 
    64   // Do all RCU threads.
    69   // Do all RCU threads.
    65   CounterThreadCheck ctc(gbl_cnt);
    70   CounterThreadCheck ctc(gbl_cnt);
    66   for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) {
    71   for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) {
    67     ctc.do_thread(thread);
    72     ctc.do_thread(thread);
    68   }
    73   }