# HG changeset patch # User ysr # Date 1306516983 25200 # Node ID 5fe4dafb3739620b429f05dd09298eef1b2dfe32 # Parent 57932d7294a9ef48c3c546c92187e456197f3b2b 7048342: CMS: eob == _limit || fc->isFree() failed: Only a free chunk should allow us to cross over the limit Summary: The freeness bit was being cleared in debug code when it shouldn't have been. Also removed unused FreeChunk methods linkAfterNonNull and clearPrev. Reviewed-by: brutisso diff -r 57932d7294a9 -r 5fe4dafb3739 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Mon May 23 16:42:14 2011 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Fri May 27 10:23:03 2011 -0700 @@ -1833,8 +1833,6 @@ } ) _indexedFreeList[size].removeChunk(fc); - debug_only(fc->clearNext()); - debug_only(fc->clearPrev()); NOT_PRODUCT( if (FLSVerifyIndexTable) { verifyIndexedFreeList(size); diff -r 57932d7294a9 -r 5fe4dafb3739 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp Mon May 23 16:42:14 2011 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp Fri May 27 10:23:03 2011 -0700 @@ -114,17 +114,11 @@ linkNext(ptr); if (ptr != NULL) ptr->linkPrev(this); } - void linkAfterNonNull(FreeChunk* ptr) { - assert(ptr != NULL, "precondition violation"); - linkNext(ptr); - ptr->linkPrev(this); - } void linkNext(FreeChunk* ptr) { _next = ptr; } void linkPrev(FreeChunk* ptr) { LP64_ONLY(if (UseCompressedOops) _prev = ptr; else) _prev = (FreeChunk*)((intptr_t)ptr | 0x1); } - void clearPrev() { _prev = NULL; } void clearNext() { _next = NULL; } void markNotFree() { // Set _prev (klass) to null before (if) clearing the mark word below