From 8f8873c859c2e01a1fb612e986448522d3f70285 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 12 Dec 2011 19:05:48 -0800 Subject: [PATCH] vm: reinitialize all_blocks from scratch after gc Faster and more likely to be correct than trying to fixup the existing set --- vm/code_heap.cpp | 13 ------------- vm/code_heap.hpp | 1 - vm/compaction.cpp | 4 ++-- 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/vm/code_heap.cpp b/vm/code_heap.cpp index b7f45a206f..e15b9488b5 100755 --- a/vm/code_heap.cpp +++ b/vm/code_heap.cpp @@ -129,19 +129,6 @@ void code_heap::initialize_all_blocks_set() allocator->iterate(inserter); } -void code_heap::update_all_blocks_set(mark_bits *code_forwarding_map) -{ - std::set new_all_blocks; - for (std::set::const_iterator oldi = all_blocks.begin(); - oldi != all_blocks.end(); - ++oldi) - { - code_block *new_block = code_forwarding_map->forward_block(*oldi); - new_all_blocks.insert(new_block); - } - all_blocks.swap(new_all_blocks); -} - /* Allocate a code heap during startup */ void factor_vm::init_code_heap(cell size) { diff --git a/vm/code_heap.hpp b/vm/code_heap.hpp index 19d5e29e09..8db96016dd 100755 --- a/vm/code_heap.hpp +++ b/vm/code_heap.hpp @@ -47,7 +47,6 @@ struct code_heap { void unguard_safepoint(); void verify_all_blocks_set(); void initialize_all_blocks_set(); - void update_all_blocks_set(mark_bits *code_forwarding_map); code_block *code_block_for_address(cell address); diff --git a/vm/compaction.cpp b/vm/compaction.cpp index dc31fce5d1..465ac573b7 100644 --- a/vm/compaction.cpp +++ b/vm/compaction.cpp @@ -185,8 +185,6 @@ void factor_vm::update_code_roots_for_compaction() else root->valid = false; } - - code->update_all_blocks_set(state); } /* Compact data and code heaps */ @@ -236,6 +234,8 @@ void factor_vm::collect_compact_impl(bool trace_contexts_p) update_code_roots_for_compaction(); callbacks->update(); + code->initialize_all_blocks_set(); + if(event) event->ended_compaction(); }