|
|
|
@ -2473,20 +2473,19 @@ bool ActivateBestChain(CValidationState &state, const CChainParams& chainparams,
@@ -2473,20 +2473,19 @@ bool ActivateBestChain(CValidationState &state, const CChainParams& chainparams,
|
|
|
|
|
pindexNewTip = chainActive.Tip(); |
|
|
|
|
pindexFork = chainActive.FindFork(pindexOldTip); |
|
|
|
|
fInitialDownload = IsInitialBlockDownload(); |
|
|
|
|
|
|
|
|
|
// throw all transactions though the signal-interface
|
|
|
|
|
for (const auto& pair : connectTrace.blocksConnected) { |
|
|
|
|
assert(pair.second); |
|
|
|
|
const CBlock& block = *(pair.second); |
|
|
|
|
for (unsigned int i = 0; i < block.vtx.size(); i++) |
|
|
|
|
GetMainSignals().SyncTransaction(*block.vtx[i], pair.first, i); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// When we reach this point, we switched to a new tip (stored in pindexNewTip).
|
|
|
|
|
|
|
|
|
|
// Notifications/callbacks that can run without cs_main
|
|
|
|
|
|
|
|
|
|
// throw all transactions though the signal-interface
|
|
|
|
|
// while _not_ holding the cs_main lock
|
|
|
|
|
for (const auto& pair : connectTrace.blocksConnected) { |
|
|
|
|
assert(pair.second); |
|
|
|
|
const CBlock& block = *(pair.second); |
|
|
|
|
for (unsigned int i = 0; i < block.vtx.size(); i++) |
|
|
|
|
GetMainSignals().SyncTransaction(*block.vtx[i], pair.first, i); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Notify external listeners about the new tip.
|
|
|
|
|
GetMainSignals().UpdatedBlockTip(pindexNewTip, pindexFork, fInitialDownload); |
|
|
|
|
|
|
|
|
|