[Places] free gcs when places terminate
This commit is contained in:
parent
c280b19ee2
commit
d197d39d2c
|
@ -2580,6 +2580,7 @@ void GC_destruct_child_gc() {
|
||||||
waiting = 1;
|
waiting = 1;
|
||||||
}
|
}
|
||||||
} while (waiting == 1);
|
} while (waiting == 1);
|
||||||
|
GC_free_child_gc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4459,6 +4460,35 @@ void GC_dump_variable_stack(void **var_stack,
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* GC free all */
|
/* GC free all */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
void GC_free_child_gc(void)
|
||||||
|
{
|
||||||
|
NewGC *gc = GC_get_GC();
|
||||||
|
int i;
|
||||||
|
mpage *work;
|
||||||
|
mpage *next;
|
||||||
|
PageMap pagemap = gc->page_maps;
|
||||||
|
|
||||||
|
gen0_free_big_pages(gc);
|
||||||
|
|
||||||
|
for(i = 0; i < PAGE_TYPES; i++) {
|
||||||
|
for (work = gc->gen1_pages[i]; work; work = next) {
|
||||||
|
next = work->next;
|
||||||
|
|
||||||
|
if (work->mprotected)
|
||||||
|
{
|
||||||
|
mmu_write_unprotect_page(gc->mmu, work->addr, real_page_size(work));
|
||||||
|
}
|
||||||
|
GCVERBOSEPAGE(gc, "Cleaning up GC DYING", work);
|
||||||
|
gen1_free_mpage(pagemap, work);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free_page_maps(gc->page_maps);
|
||||||
|
|
||||||
|
mmu_flush_freed_pages(gc->mmu);
|
||||||
|
mmu_free(gc->mmu);
|
||||||
|
free(gc);
|
||||||
|
}
|
||||||
|
|
||||||
void GC_free_all(void)
|
void GC_free_all(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user