equal
deleted
inserted
replaced
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 } |