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