< prev index next >

src/hotspot/share/gc/parallel/psCompactionManager.cpp

Print this page
rev 57190 : [mq]: shadow-regions.5
rev 57191 : [mq]: shadow-regions.5_to_6

*** 170,197 **** } } while (!region_stack()->is_empty()); } size_t ParCompactionManager::pop_shadow_region_mt_safe(PSParallelCompact::RegionData* region_ptr) { while (true) { ! MutexLocker ml(_shadow_region_monitor, Mutex::_no_safepoint_check_flag); ! if (_shadow_region_array->is_empty()) { // Check if the corresponding heap region is available now. ! // If so, we don't need to get a shadow region anymore, ! // and we return 0 to indicate this case if (region_ptr->claimed()) { ! return 0; ! } ! } else { ! return _shadow_region_array->pop(); } } } void ParCompactionManager::push_shadow_region_mt_safe(size_t shadow_region) { ! MutexLocker ml(_shadow_region_monitor, Mutex::_no_safepoint_check_flag); _shadow_region_array->push(shadow_region); } void ParCompactionManager::push_shadow_region(size_t shadow_region) { _shadow_region_array->push(shadow_region); } --- 170,198 ---- } } while (!region_stack()->is_empty()); } size_t ParCompactionManager::pop_shadow_region_mt_safe(PSParallelCompact::RegionData* region_ptr) { + MonitorLocker ml(_shadow_region_monitor, Mutex::_no_safepoint_check_flag); while (true) { ! if (!_shadow_region_array->is_empty()) { ! return _shadow_region_array->pop(); ! } // Check if the corresponding heap region is available now. ! // If so, we don't need to get a shadow region anymore, and ! // we return InvalidShadow to indicate such a case. if (region_ptr->claimed()) { ! return InvalidShadow; } + ml.wait(1); } } void ParCompactionManager::push_shadow_region_mt_safe(size_t shadow_region) { ! MonitorLocker ml(_shadow_region_monitor, Mutex::_no_safepoint_check_flag); _shadow_region_array->push(shadow_region); + ml.notify(); } void ParCompactionManager::push_shadow_region(size_t shadow_region) { _shadow_region_array->push(shadow_region); }
< prev index next >