< prev index next >

src/hotspot/share/utilities/globalCounter.inline.hpp

Print this page

        

*** 38,57 **** // Otherwise, set the counter to the current version + active bit. uintx new_cnt = old_cnt; if ((new_cnt & COUNTER_ACTIVE) == 0) { new_cnt = Atomic::load(&_global_counter._counter) | COUNTER_ACTIVE; } ! OrderAccess::release_store_fence(thread->get_rcu_counter(), new_cnt); return static_cast<CSContext>(old_cnt); } inline void GlobalCounter::critical_section_end(Thread *thread, CSContext context) { assert(thread == Thread::current(), "must be current thread"); assert((*thread->get_rcu_counter() & COUNTER_ACTIVE) == COUNTER_ACTIVE, "must be in critical section"); // Restore the counter value from before the associated begin. ! OrderAccess::release_store(thread->get_rcu_counter(), static_cast<uintx>(context)); } class GlobalCounter::CriticalSection { private: --- 38,57 ---- // Otherwise, set the counter to the current version + active bit. uintx new_cnt = old_cnt; if ((new_cnt & COUNTER_ACTIVE) == 0) { new_cnt = Atomic::load(&_global_counter._counter) | COUNTER_ACTIVE; } ! Atomic::release_store_fence(thread->get_rcu_counter(), new_cnt); return static_cast<CSContext>(old_cnt); } inline void GlobalCounter::critical_section_end(Thread *thread, CSContext context) { assert(thread == Thread::current(), "must be current thread"); assert((*thread->get_rcu_counter() & COUNTER_ACTIVE) == COUNTER_ACTIVE, "must be in critical section"); // Restore the counter value from before the associated begin. ! Atomic::release_store(thread->get_rcu_counter(), static_cast<uintx>(context)); } class GlobalCounter::CriticalSection { private:
< prev index next >