Mercurial > hg > graal-compiler
diff src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @ 1148:05b775309e59
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
author | jmasa |
---|---|
date | Thu, 07 Jan 2010 08:14:45 -0800 |
parents | e018e6884bd8 |
children | a8127dc669ba |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon Jan 04 14:51:26 2010 -0800 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Thu Jan 07 08:14:45 2010 -0800 @@ -3075,7 +3075,18 @@ if (rem > 0 && rem < MinChunkSize) { 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. // 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