]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: reinitialize all_blocks from scratch after gc
authorJoe Groff <arcata@gmail.com>
Tue, 13 Dec 2011 03:05:48 +0000 (19:05 -0800)
committerJoe Groff <arcata@gmail.com>
Tue, 13 Dec 2011 03:05:48 +0000 (19:05 -0800)
Faster and more likely to be correct than trying to fixup the existing set

vm/code_heap.cpp
vm/code_heap.hpp
vm/compaction.cpp

index b7f45a206f75b3d5f8c320b405ad61114a845bdd..e15b9488b51c8a3110945ddd4444baeb8e4dff41 100755 (executable)
@@ -129,19 +129,6 @@ void code_heap::initialize_all_blocks_set()
        allocator->iterate(inserter);
 }
 
-void code_heap::update_all_blocks_set(mark_bits<code_block> *code_forwarding_map)
-{
-       std::set<code_block *> new_all_blocks;
-       for (std::set<code_block *>::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)
 {
index 19d5e29e09f34290d8ffe6d25e5df8a43ae315c9..8db96016dd5b0f8f2cbff9da429efc94f2594f3d 100755 (executable)
@@ -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_block> *code_forwarding_map);
 
        code_block *code_block_for_address(cell address);
 
index dc31fce5d1fd0e51d8fbf5cd94e858f283634c9b..465ac573b70f060c838c0a8f4eca84e5d47288d7 100644 (file)
@@ -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();
 }