diff options
author | Jonas Schnelli <jonas.schnelli@include7.ch> | 2015-09-16 16:42:23 +0200 |
---|---|---|
committer | Jonas Schnelli <jonas.schnelli@include7.ch> | 2015-09-16 16:51:21 +0200 |
commit | d76a8acb9b7bcabf43e3e05168a36911f187818d (patch) | |
tree | 2322acc9cd1448c524e7507a517deca6da7cf43c | |
parent | 0143a1f228c3447ae2e025c697b0ad53a0d8d306 (diff) |
use CBlockIndex* insted of uint256 for UpdatedBlockTip signal
- removes mapBlockIndex find operation
- theoretically allows removing the cs_main lock during zqm notification while introducing a new file position lock
-rw-r--r-- | src/main.cpp | 2 | ||||
-rw-r--r-- | src/validationinterface.h | 5 | ||||
-rw-r--r-- | src/zmq/zmqabstractnotifier.cpp | 2 | ||||
-rw-r--r-- | src/zmq/zmqabstractnotifier.h | 4 | ||||
-rw-r--r-- | src/zmq/zmqnotificationinterface.cpp | 4 | ||||
-rw-r--r-- | src/zmq/zmqnotificationinterface.h | 3 | ||||
-rw-r--r-- | src/zmq/zmqpublishnotifier.cpp | 12 | ||||
-rw-r--r-- | src/zmq/zmqpublishnotifier.h | 6 |
8 files changed, 21 insertions, 17 deletions
diff --git a/src/main.cpp b/src/main.cpp index 27278b977a..d0d2476462 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2303,7 +2303,7 @@ bool ActivateBestChain(CValidationState &state, const CBlock *pblock) { pnode->PushInventory(CInv(MSG_BLOCK, hashNewTip)); } // Notify external listeners about the new tip. - GetMainSignals().UpdatedBlockTip(hashNewTip); + GetMainSignals().UpdatedBlockTip(pindexNewTip); uiInterface.NotifyBlockTip(hashNewTip); } } while(pindexMostWork != chainActive.Tip()); diff --git a/src/validationinterface.h b/src/validationinterface.h index 6f95ad74eb..ffb56d266b 100644 --- a/src/validationinterface.h +++ b/src/validationinterface.h @@ -11,6 +11,7 @@ class CBlock; struct CBlockLocator; +class CBlockIndex; class CReserveScript; class CTransaction; class CValidationInterface; @@ -30,7 +31,7 @@ void SyncWithWallets(const CTransaction& tx, const CBlock* pblock = NULL); class CValidationInterface { protected: - virtual void UpdatedBlockTip(const uint256 &newHashTip) {} + virtual void UpdatedBlockTip(const CBlockIndex *pindex) {} virtual void SyncTransaction(const CTransaction &tx, const CBlock *pblock) {} virtual void SetBestChain(const CBlockLocator &locator) {} virtual void UpdatedTransaction(const uint256 &hash) {} @@ -46,7 +47,7 @@ protected: struct CMainSignals { /** Notifies listeners of updated block chain tip */ - boost::signals2::signal<void (const uint256 &)> UpdatedBlockTip; + boost::signals2::signal<void (const CBlockIndex *)> UpdatedBlockTip; /** Notifies listeners of updated transaction data (transaction, and optionally the block it is found in. */ boost::signals2::signal<void (const CTransaction &, const CBlock *)> SyncTransaction; /** Notifies listeners of an updated transaction without new data (for now: a coinbase potentially becoming visible). */ diff --git a/src/zmq/zmqabstractnotifier.cpp b/src/zmq/zmqabstractnotifier.cpp index 744ec59234..9f5cb3ba67 100644 --- a/src/zmq/zmqabstractnotifier.cpp +++ b/src/zmq/zmqabstractnotifier.cpp @@ -11,7 +11,7 @@ CZMQAbstractNotifier::~CZMQAbstractNotifier() assert(!psocket); } -bool CZMQAbstractNotifier::NotifyBlock(const uint256 &/*hash*/) +bool CZMQAbstractNotifier::NotifyBlock(const CBlockIndex * /*CBlockIndex*/) { return true; } diff --git a/src/zmq/zmqabstractnotifier.h b/src/zmq/zmqabstractnotifier.h index 626d1ddf92..77cf5141e2 100644 --- a/src/zmq/zmqabstractnotifier.h +++ b/src/zmq/zmqabstractnotifier.h @@ -7,7 +7,9 @@ #include "zmqconfig.h" +class CBlockIndex; class CZMQAbstractNotifier; + typedef CZMQAbstractNotifier* (*CZMQNotifierFactory)(); class CZMQAbstractNotifier @@ -30,7 +32,7 @@ public: virtual bool Initialize(void *pcontext) = 0; virtual void Shutdown() = 0; - virtual bool NotifyBlock(const uint256 &hash); + virtual bool NotifyBlock(const CBlockIndex *pindex); virtual bool NotifyTransaction(const CTransaction &transaction); protected: diff --git a/src/zmq/zmqnotificationinterface.cpp b/src/zmq/zmqnotificationinterface.cpp index 71ccb59a4a..388b86707b 100644 --- a/src/zmq/zmqnotificationinterface.cpp +++ b/src/zmq/zmqnotificationinterface.cpp @@ -120,12 +120,12 @@ void CZMQNotificationInterface::Shutdown() } } -void CZMQNotificationInterface::UpdatedBlockTip(const uint256 &hash) +void CZMQNotificationInterface::UpdatedBlockTip(const CBlockIndex *pindex) { for (std::list<CZMQAbstractNotifier*>::iterator i = notifiers.begin(); i!=notifiers.end(); ) { CZMQAbstractNotifier *notifier = *i; - if (notifier->NotifyBlock(hash)) + if (notifier->NotifyBlock(pindex)) { i++; } diff --git a/src/zmq/zmqnotificationinterface.h b/src/zmq/zmqnotificationinterface.h index afc0b8d24e..8eea15c068 100644 --- a/src/zmq/zmqnotificationinterface.h +++ b/src/zmq/zmqnotificationinterface.h @@ -9,6 +9,7 @@ #include <string> #include <map> +class CBlockIndex; class CZMQAbstractNotifier; class CZMQNotificationInterface : public CValidationInterface @@ -23,7 +24,7 @@ public: protected: // CValidationInterface void SyncTransaction(const CTransaction &tx, const CBlock *pblock); - void UpdatedBlockTip(const uint256 &newHashTip); + void UpdatedBlockTip(const CBlockIndex *pindex); private: CZMQNotificationInterface(); diff --git a/src/zmq/zmqpublishnotifier.cpp b/src/zmq/zmqpublishnotifier.cpp index 0a6d7d0dbc..4c3eb8f2d9 100644 --- a/src/zmq/zmqpublishnotifier.cpp +++ b/src/zmq/zmqpublishnotifier.cpp @@ -116,8 +116,9 @@ void CZMQAbstractPublishNotifier::Shutdown() psocket = 0; } -bool CZMQPublishHashBlockNotifier::NotifyBlock(const uint256 &hash) +bool CZMQPublishHashBlockNotifier::NotifyBlock(const CBlockIndex *pindex) { + uint256 hash = pindex->GetBlockHash(); LogPrint("zmq", "Publish hash block %s\n", hash.GetHex()); char data[32]; for (unsigned int i = 0; i < 32; i++) @@ -137,18 +138,15 @@ bool CZMQPublishHashTransactionNotifier::NotifyTransaction(const CTransaction &t return rc == 0; } -bool CZMQPublishRawBlockNotifier::NotifyBlock(const uint256 &hash) +bool CZMQPublishRawBlockNotifier::NotifyBlock(const CBlockIndex *pindex) { - LogPrint("zmq", "Publish raw block %s\n", hash.GetHex()); + LogPrint("zmq", "Publish raw block %s\n", pindex->GetBlockHash().GetHex()); CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); { LOCK(cs_main); - CBlock block; - CBlockIndex* pblockindex = mapBlockIndex[hash]; - - if(!ReadBlockFromDisk(block, pblockindex)) + if(!ReadBlockFromDisk(block, pindex)) { zmqError("Can't read block from disk"); return false; diff --git a/src/zmq/zmqpublishnotifier.h b/src/zmq/zmqpublishnotifier.h index a0eb26f5e2..44d5cbea67 100644 --- a/src/zmq/zmqpublishnotifier.h +++ b/src/zmq/zmqpublishnotifier.h @@ -7,6 +7,8 @@ #include "zmqabstractnotifier.h" +class CBlockIndex; + class CZMQAbstractPublishNotifier : public CZMQAbstractNotifier { public: @@ -17,7 +19,7 @@ public: class CZMQPublishHashBlockNotifier : public CZMQAbstractPublishNotifier { public: - bool NotifyBlock(const uint256 &hash); + bool NotifyBlock(const CBlockIndex *pindex); }; class CZMQPublishHashTransactionNotifier : public CZMQAbstractPublishNotifier @@ -29,7 +31,7 @@ public: class CZMQPublishRawBlockNotifier : public CZMQAbstractPublishNotifier { public: - bool NotifyBlock(const uint256 &hash); + bool NotifyBlock(const CBlockIndex *pindex); }; class CZMQPublishRawTransactionNotifier : public CZMQAbstractPublishNotifier |