提交 74f2253f 编写于 作者: J jmasa

6912018: CMS: guarantee(head() != 0,"The head of the list cannot be NULL")

Summary: Block too small to split was not correctly putback to free lists.
Reviewed-by: ysr
上级 0698402e
...@@ -3075,7 +3075,18 @@ void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n ...@@ -3075,7 +3075,18 @@ void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n
if (rem > 0 && rem < MinChunkSize) { if (rem > 0 && rem < MinChunkSize) {
n--; rem += word_sz; n--; rem += word_sz;
} }
assert((ssize_t)n >= 1, "Control point invariant"); // Note that at this point we may have n == 0.
assert((ssize_t)n >= 0, "Control point invariant");
// If n is 0, the chunk fc that was found is not large
// enough to leave a viable remainder. We are unable to
// allocate even one block. Return fc to the
// dictionary and return, leaving "fl" empty.
if (n == 0) {
returnChunkToDictionary(fc);
return;
}
// First return the remainder, if any. // First return the remainder, if any.
// Note that we hold the lock until we decide if we're going to give // Note that we hold the lock until we decide if we're going to give
// back the remainder to the dictionary, since a concurrent allocation // back the remainder to the dictionary, since a concurrent allocation
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册