8178497: Bug in MutableNUMASpace::ensure_parsability

Changed problematic variable type from intptr_t to HeapWord*

Reviewed-by: tschatzl, sjohanss
This commit is contained in:
Sangheon Kim 2017-11-27 13:19:08 -08:00
parent 1c25161036
commit 8a150bbd05

View File

@ -91,14 +91,14 @@ void MutableNUMASpace::ensure_parsability() {
MutableSpace *s = ls->space();
if (s->top() < top()) { // For all spaces preceding the one containing top()
if (s->free_in_words() > 0) {
intptr_t cur_top = (intptr_t)s->top();
HeapWord* cur_top = s->top();
size_t words_left_to_fill = pointer_delta(s->end(), s->top());;
while (words_left_to_fill > 0) {
size_t words_to_fill = MIN2(words_left_to_fill, CollectedHeap::filler_array_max_size());
assert(words_to_fill >= CollectedHeap::min_fill_size(),
"Remaining size (" SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")",
words_to_fill, words_left_to_fill, CollectedHeap::filler_array_max_size());
CollectedHeap::fill_with_object((HeapWord*)cur_top, words_to_fill);
CollectedHeap::fill_with_object(cur_top, words_to_fill);
if (!os::numa_has_static_binding()) {
size_t touched_words = words_to_fill;
#ifndef ASSERT
@ -108,19 +108,19 @@ void MutableNUMASpace::ensure_parsability() {
}
#endif
MemRegion invalid;
HeapWord *crossing_start = align_up((HeapWord*)cur_top, os::vm_page_size());
HeapWord *crossing_end = align_down((HeapWord*)(cur_top + touched_words), os::vm_page_size());
HeapWord *crossing_start = align_up(cur_top, os::vm_page_size());
HeapWord *crossing_end = align_down(cur_top + touched_words, os::vm_page_size());
if (crossing_start != crossing_end) {
// If object header crossed a small page boundary we mark the area
// as invalid rounding it to a page_size().
HeapWord *start = MAX2(align_down((HeapWord*)cur_top, page_size()), s->bottom());
HeapWord *end = MIN2(align_up((HeapWord*)(cur_top + touched_words), page_size()), s->end());
HeapWord *start = MAX2(align_down(cur_top, page_size()), s->bottom());
HeapWord *end = MIN2(align_up(cur_top + touched_words, page_size()), s->end());
invalid = MemRegion(start, end);
}
ls->add_invalid_region(invalid);
}
cur_top = cur_top + (words_to_fill * HeapWordSize);
cur_top += words_to_fill;
words_left_to_fill -= words_to_fill;
}
}