69 return tl; |
69 return tl; |
70 } |
70 } |
71 TreeList* TreeList::as_TreeList(HeapWord* addr, size_t size) { |
71 TreeList* TreeList::as_TreeList(HeapWord* addr, size_t size) { |
72 TreeChunk* tc = (TreeChunk*) addr; |
72 TreeChunk* tc = (TreeChunk*) addr; |
73 assert(size >= sizeof(TreeChunk), "Chunk is too small for a TreeChunk"); |
73 assert(size >= sizeof(TreeChunk), "Chunk is too small for a TreeChunk"); |
74 assert(tc->size() == 0 && tc->prev() == NULL && tc->next() == NULL, |
74 // The space in the heap will have been mangled initially but |
75 "Space should be clear"); |
75 // is not remangled when a free chunk is returned to the free list |
|
76 // (since it is used to maintain the chunk on the free list). |
|
77 assert((ZapUnusedHeapArea && |
|
78 SpaceMangler::is_mangled((HeapWord*) tc->size_addr()) && |
|
79 SpaceMangler::is_mangled((HeapWord*) tc->prev_addr()) && |
|
80 SpaceMangler::is_mangled((HeapWord*) tc->next_addr())) || |
|
81 (tc->size() == 0 && tc->prev() == NULL && tc->next() == NULL), |
|
82 "Space should be clear or mangled"); |
76 tc->setSize(size); |
83 tc->setSize(size); |
77 tc->linkPrev(NULL); |
84 tc->linkPrev(NULL); |
78 tc->linkNext(NULL); |
85 tc->linkNext(NULL); |
79 TreeList* tl = TreeList::as_TreeList(tc); |
86 TreeList* tl = TreeList::as_TreeList(tc); |
80 return tl; |
87 return tl; |