< 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 >