[Places] free mark stack when place terminates

This commit is contained in:
Kevin Tew 2011-04-22 15:32:54 -06:00
parent b228316a8a
commit f4307c65a7

View File

@ -2133,6 +2133,20 @@ inline static void clear_stack_pages(NewGC *gc)
}
}
inline static void free_all_stack_pages(NewGC *gc)
{
if(gc->mark_stack) {
MarkSegment *temp;
/* go to the head of the list */
for(; gc->mark_stack->prev; gc->mark_stack = gc->mark_stack->prev) {}
/* then go through and clear them out */
for(; gc->mark_stack; gc->mark_stack = temp) {
temp = gc->mark_stack->next;
free(gc->mark_stack);
}
}
}
inline static void reset_pointer_stack(NewGC *gc)
{
/* go to the head of the list */
@ -4520,6 +4534,7 @@ static void free_child_gc(void)
}
free_page_maps(gc->page_maps);
free_all_stack_pages(gc);
mmu_flush_freed_pages(gc->mmu);
mmu_free(gc->mmu);
@ -4555,7 +4570,7 @@ void GC_free_all(void)
free(gc->mark_table);
free(gc->fixup_table);
free_page_maps(gc->page_maps);
free_all_stack_pages(gc);
mmu_flush_freed_pages(gc->mmu);
mmu_free(gc->mmu);