vm: reinitialize all_blocks from scratch after gc
Faster and more likely to be correct than trying to fixup the existing setdb4
parent
4bbb2f5b72
commit
083b856604
|
@ -129,19 +129,6 @@ void code_heap::initialize_all_blocks_set()
|
||||||
allocator->iterate(inserter);
|
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 */
|
/* Allocate a code heap during startup */
|
||||||
void factor_vm::init_code_heap(cell size)
|
void factor_vm::init_code_heap(cell size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,7 +47,6 @@ struct code_heap {
|
||||||
void unguard_safepoint();
|
void unguard_safepoint();
|
||||||
void verify_all_blocks_set();
|
void verify_all_blocks_set();
|
||||||
void initialize_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);
|
code_block *code_block_for_address(cell address);
|
||||||
|
|
||||||
|
|
|
@ -185,8 +185,6 @@ void factor_vm::update_code_roots_for_compaction()
|
||||||
else
|
else
|
||||||
root->valid = false;
|
root->valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
code->update_all_blocks_set(state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compact data and code heaps */
|
/* Compact data and code heaps */
|
||||||
|
@ -236,6 +234,8 @@ void factor_vm::collect_compact_impl(bool trace_contexts_p)
|
||||||
update_code_roots_for_compaction();
|
update_code_roots_for_compaction();
|
||||||
callbacks->update();
|
callbacks->update();
|
||||||
|
|
||||||
|
code->initialize_all_blocks_set();
|
||||||
|
|
||||||
if(event) event->ended_compaction();
|
if(event) event->ended_compaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue