core: call {prepare|cleanup}_handle_incoming_blocks when adding a mined block

This ensures that a batch can't also be started/stopped out of
sync by another thread and us getting in the middle
This commit is contained in:
moneromooo-monero 2017-03-19 10:25:12 +00:00
parent 82411cdf3a
commit a6f1d8fc4c
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3
1 changed files with 17 additions and 0 deletions

View File

@ -887,11 +887,28 @@ namespace cryptonote
m_miner.resume(); m_miner.resume();
} }
//----------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------
block_complete_entry get_block_complete_entry(block& b, tx_memory_pool &pool)
{
block_complete_entry bce;
bce.block = cryptonote::block_to_blob(b);
for (const auto &tx_hash: b.tx_hashes)
{
cryptonote::transaction tx;
CHECK_AND_ASSERT_THROW_MES(pool.get_transaction(tx_hash, tx), "Transaction not found in pool");
bce.txs.push_back(cryptonote::tx_to_blob(tx));
}
return bce;
}
//-----------------------------------------------------------------------------------------------
bool core::handle_block_found(block& b) bool core::handle_block_found(block& b)
{ {
block_verification_context bvc = boost::value_initialized<block_verification_context>(); block_verification_context bvc = boost::value_initialized<block_verification_context>();
m_miner.pause(); m_miner.pause();
std::list<block_complete_entry> blocks;
blocks.push_back(get_block_complete_entry(b, m_mempool));
prepare_handle_incoming_blocks(blocks);
m_blockchain_storage.add_new_block(b, bvc); m_blockchain_storage.add_new_block(b, bvc);
cleanup_handle_incoming_blocks(true);
//anyway - update miner template //anyway - update miner template
update_miner_block_template(); update_miner_block_template();
m_miner.resume(); m_miner.resume();