提交 5e28a367 编写于 作者: Y ysr

7048342: CMS: eob == _limit || fc->isFree() failed: Only a free chunk should...

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
上级 4a132bd6
...@@ -1833,8 +1833,6 @@ CompactibleFreeListSpace::removeChunkFromIndexedFreeList(FreeChunk* fc) { ...@@ -1833,8 +1833,6 @@ CompactibleFreeListSpace::removeChunkFromIndexedFreeList(FreeChunk* fc) {
} }
) )
_indexedFreeList[size].removeChunk(fc); _indexedFreeList[size].removeChunk(fc);
debug_only(fc->clearNext());
debug_only(fc->clearPrev());
NOT_PRODUCT( NOT_PRODUCT(
if (FLSVerifyIndexTable) { if (FLSVerifyIndexTable) {
verifyIndexedFreeList(size); verifyIndexedFreeList(size);
......
...@@ -114,17 +114,11 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC { ...@@ -114,17 +114,11 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC {
linkNext(ptr); linkNext(ptr);
if (ptr != NULL) ptr->linkPrev(this); 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 linkNext(FreeChunk* ptr) { _next = ptr; }
void linkPrev(FreeChunk* ptr) { void linkPrev(FreeChunk* ptr) {
LP64_ONLY(if (UseCompressedOops) _prev = ptr; else) LP64_ONLY(if (UseCompressedOops) _prev = ptr; else)
_prev = (FreeChunk*)((intptr_t)ptr | 0x1); _prev = (FreeChunk*)((intptr_t)ptr | 0x1);
} }
void clearPrev() { _prev = NULL; }
void clearNext() { _next = NULL; } void clearNext() { _next = NULL; }
void markNotFree() { void markNotFree() {
// Set _prev (klass) to null before (if) clearing the mark word below // Set _prev (klass) to null before (if) clearing the mark word below
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册