From 22fdddeabb17881af2004c45538f91514837d363 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 27 Apr 2017 11:31:53 -0400 Subject: [PATCH] Avoid calling GetSerializeSize on each tx in a block if !fTxIndex --- src/validation.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/validation.cpp b/src/validation.cpp index f6b77b6c3..af303df73 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -1647,6 +1647,8 @@ static bool WriteUndoDataForBlock(const CBlockUndo& blockundo, CValidationState& static bool WriteTxIndexDataForBlock(const CBlock& block, CValidationState& state, CBlockIndex* pindex) { + if (!fTxIndex) return true; + CDiskTxPos pos(pindex->GetBlockPos(), GetSizeOfCompactSize(block.vtx.size())); std::vector > vPos; vPos.reserve(block.vtx.size()); @@ -1656,9 +1658,9 @@ static bool WriteTxIndexDataForBlock(const CBlock& block, CValidationState& stat pos.nTxOffset += ::GetSerializeSize(*tx, SER_DISK, CLIENT_VERSION); } - if (fTxIndex) - if (!pblocktree->WriteTxIndex(vPos)) - return AbortNode(state, "Failed to write transaction index"); + if (!pblocktree->WriteTxIndex(vPos)) { + return AbortNode(state, "Failed to write transaction index"); + } return true; }