diff options
| author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2018-11-23 11:15:04 +0000 |
|---|---|---|
| committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2019-03-05 11:58:13 +0000 |
| commit | 238401d4e950dad6a243fb895027dd26d2992ee6 (patch) | |
| tree | ace8c69b75f6e6db2d2bdad69456ce346348b48c /src/cryptonote_core/cryptonote_core.cpp | |
| parent | dc5a76095cc4b05d7a706c3b650e54f2db314926 (diff) | |
| download | monzero-core-238401d4e950dad6a243fb895027dd26d2992ee6.tar.gz monzero-core-238401d4e950dad6a243fb895027dd26d2992ee6.tar.xz monzero-core-238401d4e950dad6a243fb895027dd26d2992ee6.zip | |
core: avoid double parsing blocks after hoh
Diffstat (limited to 'src/cryptonote_core/cryptonote_core.cpp')
| -rw-r--r-- | src/cryptonote_core/cryptonote_core.cpp | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp index 0d29f996a..bab0e2dd9 100644 --- a/src/cryptonote_core/cryptonote_core.cpp +++ b/src/cryptonote_core/cryptonote_core.cpp @@ -1330,7 +1330,8 @@ namespace cryptonote m_miner.resume(); return false; } - prepare_handle_incoming_blocks(blocks); + std::vector<block> pblocks; + prepare_handle_incoming_blocks(blocks, pblocks); m_blockchain_storage.add_new_block(b, bvc); cleanup_handle_incoming_blocks(true); //anyway - update miner template @@ -1381,10 +1382,10 @@ namespace cryptonote } //----------------------------------------------------------------------------------------------- - bool core::prepare_handle_incoming_blocks(const std::vector<block_complete_entry> &blocks) + bool core::prepare_handle_incoming_blocks(const std::vector<block_complete_entry> &blocks_entry, std::vector<block> &blocks) { m_incoming_tx_lock.lock(); - m_blockchain_storage.prepare_handle_incoming_blocks(blocks); + m_blockchain_storage.prepare_handle_incoming_blocks(blocks_entry, blocks); return true; } @@ -1401,7 +1402,7 @@ namespace cryptonote } //----------------------------------------------------------------------------------------------- - bool core::handle_incoming_block(const blobdata& block_blob, block_verification_context& bvc, bool update_miner_blocktemplate) + bool core::handle_incoming_block(const blobdata& block_blob, const block *b, block_verification_context& bvc, bool update_miner_blocktemplate) { TRY_ENTRY(); @@ -1417,14 +1418,18 @@ namespace cryptonote return false; } - block b = AUTO_VAL_INIT(b); - if(!parse_and_validate_block_from_blob(block_blob, b)) + block lb; + if (!b) { - LOG_PRINT_L1("Failed to parse and validate new block"); - bvc.m_verifivation_failed = true; - return false; + if(!parse_and_validate_block_from_blob(block_blob, lb)) + { + LOG_PRINT_L1("Failed to parse and validate new block"); + bvc.m_verifivation_failed = true; + return false; + } + b = &lb; } - add_new_block(b, bvc); + add_new_block(*b, bvc); if(update_miner_blocktemplate && bvc.m_added_to_main_chain) update_miner_block_template(); return true; |
