< prev index next >

src/hotspot/share/services/memoryManager.cpp

Print this page

        

*** 92,102 **** } instanceOop MemoryManager::get_memory_manager_instance(TRAPS) { // Must do an acquire so as to force ordering of subsequent // loads from anything _memory_mgr_obj points to or implies. ! instanceOop mgr_obj = (instanceOop)OrderAccess::load_ptr_acquire(&_memory_mgr_obj); if (mgr_obj == NULL) { // It's ok for more than one thread to execute the code up to the locked region. // Extra manager instances will just be gc'ed. Klass* k = Management::sun_management_ManagementFactoryHelper_klass(CHECK_0); --- 92,102 ---- } instanceOop MemoryManager::get_memory_manager_instance(TRAPS) { // Must do an acquire so as to force ordering of subsequent // loads from anything _memory_mgr_obj points to or implies. ! instanceOop mgr_obj = OrderAccess::load_acquire(&_memory_mgr_obj); if (mgr_obj == NULL) { // It's ok for more than one thread to execute the code up to the locked region. // Extra manager instances will just be gc'ed. Klass* k = Management::sun_management_ManagementFactoryHelper_klass(CHECK_0);
*** 145,155 **** // _memory_mgr_obj here because some other thread may have initialized // it while we were executing the code before the lock. // // The lock has done an acquire, so the load can't float above it, but // we need to do a load_acquire as above. ! mgr_obj = (instanceOop)OrderAccess::load_ptr_acquire(&_memory_mgr_obj); if (mgr_obj != NULL) { return mgr_obj; } // Get the address of the object we created via call_special. --- 145,155 ---- // _memory_mgr_obj here because some other thread may have initialized // it while we were executing the code before the lock. // // The lock has done an acquire, so the load can't float above it, but // we need to do a load_acquire as above. ! mgr_obj = OrderAccess::load_acquire(&_memory_mgr_obj); if (mgr_obj != NULL) { return mgr_obj; } // Get the address of the object we created via call_special.
*** 157,167 **** // Use store barrier to make sure the memory accesses associated // with creating the management object are visible before publishing // its address. The unlock will publish the store to _memory_mgr_obj // because it does a release first. ! OrderAccess::release_store_ptr(&_memory_mgr_obj, mgr_obj); } } return mgr_obj; } --- 157,167 ---- // Use store barrier to make sure the memory accesses associated // with creating the management object are visible before publishing // its address. The unlock will publish the store to _memory_mgr_obj // because it does a release first. ! OrderAccess::release_store(&_memory_mgr_obj, mgr_obj); } } return mgr_obj; }
< prev index next >