< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahPacer.inline.hpp
Print this page
rev 59716 : 8247367: Shenandoah: pacer should wait on lock instead of exponential backoff
Reviewed-by: XXX
*** 46,56 ****
}
inline void ShenandoahPacer::report_internal(size_t words) {
assert(ShenandoahPacing, "Only be here when pacing is enabled");
STATIC_ASSERT(sizeof(size_t) <= sizeof(intptr_t));
! Atomic::add(&_budget, (intptr_t)words);
}
inline void ShenandoahPacer::report_progress_internal(size_t words) {
assert(ShenandoahPacing, "Only be here when pacing is enabled");
STATIC_ASSERT(sizeof(size_t) <= sizeof(intptr_t));
--- 46,63 ----
}
inline void ShenandoahPacer::report_internal(size_t words) {
assert(ShenandoahPacing, "Only be here when pacing is enabled");
STATIC_ASSERT(sizeof(size_t) <= sizeof(intptr_t));
! intptr_t inc = (intptr_t) words;
! intptr_t new_budget = Atomic::add(&_budget, inc);
!
! // Was the budget replenished beyond zero? Then all pacing claims
! // are satisfied, notify the waiters.
! if (new_budget >= 0 && (new_budget - inc) < 0) {
! notify_waiters();
! }
}
inline void ShenandoahPacer::report_progress_internal(size_t words) {
assert(ShenandoahPacing, "Only be here when pacing is enabled");
STATIC_ASSERT(sizeof(size_t) <= sizeof(intptr_t));
< prev index next >