Refactored code into gen0_free_big_pages
svn: r12280
This commit is contained in:
parent
4961879ff7
commit
453e20fd12
|
@ -1474,6 +1474,7 @@ void GC_mark(const void *const_p)
|
||||||
|
|
||||||
backtrace_new_page(page);
|
backtrace_new_page(page);
|
||||||
|
|
||||||
|
/* add to gen1 */
|
||||||
page->next = GC->gen1_pages[PAGE_BIG];
|
page->next = GC->gen1_pages[PAGE_BIG];
|
||||||
page->prev = NULL;
|
page->prev = NULL;
|
||||||
if(page->next) page->next->prev = page;
|
if(page->next) page->next->prev = page;
|
||||||
|
@ -2213,6 +2214,21 @@ static inline void cleanup_vacated_pages(NewGC *gc) {
|
||||||
}
|
}
|
||||||
gc->release_pages = NULL;
|
gc->release_pages = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline static void gen0_free_big_pages() {
|
||||||
|
mpage *work;
|
||||||
|
mpage *next;
|
||||||
|
NewGC *gc = GC;
|
||||||
|
|
||||||
|
for(work = gc->gen0.big_pages; work; work = next) {
|
||||||
|
next = work->next;
|
||||||
|
pagemap_remove(work);
|
||||||
|
free_pages(work->addr, round_to_apage_size(work->size));
|
||||||
|
free_mpage(work);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void clean_up_heap(void)
|
static void clean_up_heap(void)
|
||||||
{
|
{
|
||||||
struct mpage *work, *prev;
|
struct mpage *work, *prev;
|
||||||
|
@ -2221,13 +2237,7 @@ static void clean_up_heap(void)
|
||||||
|
|
||||||
gc->memory_in_use = 0;
|
gc->memory_in_use = 0;
|
||||||
|
|
||||||
/* For the purposes of this little loop, s/prev/next/ */
|
gen0_free_big_pages();
|
||||||
for(work = gc->gen0.big_pages; work; work = prev) {
|
|
||||||
prev = work->next;
|
|
||||||
pagemap_remove(work);
|
|
||||||
free_pages(work->addr, round_to_apage_size(work->size));
|
|
||||||
free_mpage(work);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < PAGE_TYPES; i++) {
|
for(i = 0; i < PAGE_TYPES; i++) {
|
||||||
struct mpage *prev = NULL;
|
struct mpage *prev = NULL;
|
||||||
|
@ -2565,11 +2575,7 @@ void GC_free_all(void)
|
||||||
|
|
||||||
remove_signal_handler();
|
remove_signal_handler();
|
||||||
|
|
||||||
for (work = GC->gen0.big_pages; work; work = next) {
|
gen0_free_big_pages();
|
||||||
next = work->next;
|
|
||||||
free_pages(work->addr, round_to_apage_size(work->size));
|
|
||||||
free_mpage(work);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < PAGE_TYPES; i++) {
|
for(i = 0; i < PAGE_TYPES; i++) {
|
||||||
for (work = GC->gen1_pages[i]; work; work = next) {
|
for (work = GC->gen1_pages[i]; work; work = next) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user