diff options
| author | Jim Posen <[email protected]> | 2017-12-08 11:20:10 -0800 |
|---|---|---|
| committer | Jim Posen <[email protected]> | 2018-04-25 11:25:11 -0700 |
| commit | f90c3a62f506d1bc0fe26972b312f07152c79b2e (patch) | |
| tree | a5a6e11dd46e84f703a21a3288036a22b1e73ce4 /src/index/txindex.cpp | |
| parent | [index] Allow TxIndex sync thread to be interrupted. (diff) | |
| download | discoin-f90c3a62f506d1bc0fe26972b312f07152c79b2e.tar.xz discoin-f90c3a62f506d1bc0fe26972b312f07152c79b2e.zip | |
[index] TxIndex method to wait until caught up.
In order to preserve getrawtransaction RPC behavior, there needs to be
a way for a thread to ensure the transaction index is in sync with the
current state of the blockchain.
Diffstat (limited to 'src/index/txindex.cpp')
| -rw-r--r-- | src/index/txindex.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/index/txindex.cpp b/src/index/txindex.cpp index 82798fbcc..484526a6d 100644 --- a/src/index/txindex.cpp +++ b/src/index/txindex.cpp @@ -228,6 +228,30 @@ void TxIndex::SetBestChain(const CBlockLocator& locator) } } +bool TxIndex::BlockUntilSyncedToCurrentChain() +{ + AssertLockNotHeld(cs_main); + + if (!m_synced) { + return false; + } + + { + // Skip the queue-draining stuff if we know we're caught up with + // chainActive.Tip(). + LOCK(cs_main); + const CBlockIndex* chain_tip = chainActive.Tip(); + const CBlockIndex* best_block_index = m_best_block_index.load(); + if (best_block_index->GetAncestor(chain_tip->nHeight) == chain_tip) { + return true; + } + } + + LogPrintf("%s: txindex is catching up on block notifications\n", __func__); + SyncWithValidationInterfaceQueue(); + return true; +} + bool TxIndex::FindTx(const uint256& txid, CDiskTxPos& pos) const { return m_db->ReadTxPos(txid, pos); |