6808322: ParNew, CMS, G1: ParGCAllocBuffer overflow

Correct the overflow check in ParGCAllocBuffer::allocate(); simplify ParGCAllocBuffer::undo_allocation().

Reviewed-by: apetrusenko, jcoomes, jmasa, minqi, phh, tonyp
This commit is contained in:
Y. Srinivas Ramakrishna 2009-03-13 13:56:01 -07:00
parent 1e875ce562
commit a45005f646

View File

@ -63,9 +63,8 @@ public:
// return NULL.
HeapWord* allocate(size_t word_sz) {
HeapWord* res = _top;
HeapWord* new_top = _top + word_sz;
if (new_top <= _end) {
_top = new_top;
if (pointer_delta(_end, _top) >= word_sz) {
_top = _top + word_sz;
return res;
} else {
return NULL;
@ -75,10 +74,9 @@ public:
// Undo the last allocation in the buffer, which is required to be of the
// "obj" of the given "word_sz".
void undo_allocation(HeapWord* obj, size_t word_sz) {
assert(_top - word_sz >= _bottom
&& _top - word_sz == obj,
"Bad undo_allocation");
_top = _top - word_sz;
assert(pointer_delta(_top, _bottom) >= word_sz, "Bad undo");
assert(pointer_delta(_top, obj) == word_sz, "Bad undo");
_top = obj;
}
// The total (word) size of the buffer, including both allocated and