Cleaned up clean_up_heap

svn: r12282
This commit is contained in:
Kevin Tew 2008-11-05 21:07:43 +00:00
parent 7e56ab9d40
commit 615003c4e8

View File

@ -2234,46 +2234,42 @@ inline static void gen0_free_big_pages() {
static void clean_up_heap(void) static void clean_up_heap(void)
{ {
struct mpage *work, *prev;
int i; int i;
size_t memory_in_use = 0;
NewGC *gc = GC; NewGC *gc = GC;
gc->memory_in_use = 0;
gen0_free_big_pages(); gen0_free_big_pages();
for(i = 0; i < PAGE_TYPES; i++) { for(i = 0; i < PAGE_TYPES; i++) {
struct mpage *prev = NULL;
if(gc->gc_full) { if(gc->gc_full) {
work = GC->gen1_pages[i]; mpage *work = GC->gen1_pages[i];
mpage *prev = NULL;
while(work) { while(work) {
mpage *next = work->next;
if(!work->marked_on) { if(!work->marked_on) {
struct mpage *next = work->next; /* remove work from list */
if(prev) prev->next = next; else GC->gen1_pages[i] = next; if(prev) prev->next = next; else GC->gen1_pages[i] = next;
if(next) work->next->prev = prev; if(next) work->next->prev = prev;
gen1_free_mpage(work); gen1_free_mpage(work);
work = next;
} else { } else {
pagemap_add(work); pagemap_add(work);
work->back_pointers = work->marked_on = 0; work->back_pointers = work->marked_on = 0;
memory_in_use += work->size;
prev = work; prev = work;
work = work->next;
} }
work = next;
} }
} else { } else {
mpage *work;
for(work = GC->gen1_pages[i]; work; work = work->next) { for(work = GC->gen1_pages[i]; work; work = work->next) {
pagemap_add(work); pagemap_add(work);
work->back_pointers = work->marked_on = 0; work->back_pointers = work->marked_on = 0;
memory_in_use += work->size;
} }
} }
/* since we're here anyways, compute the total memory use */
for(work = GC->gen1_pages[i]; work; work = work->next)
gc->memory_in_use += work->size;
} }
gc->memory_in_use = memory_in_use;
cleanup_vacated_pages(gc); cleanup_vacated_pages(gc);
} }