Browse Source
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
v1.0.9-lin
Jonas Schnelli
9 years ago
committed by
Jack Grigg
No known key found for this signature in database
GPG Key ID: 6A6914DAFBEA00DA
8 changed files with
20 additions and
17 deletions
src/main.cpp
src/validationinterface.h
src/zmq/zmqabstractnotifier.cpp
src/zmq/zmqabstractnotifier.h
src/zmq/zmqnotificationinterface.cpp
src/zmq/zmqnotificationinterface.h
src/zmq/zmqpublishnotifier.cpp
src/zmq/zmqpublishnotifier.h
@ -2707,7 +2707,7 @@ bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
pnode - > PushInventory ( CInv ( MSG_BLOCK , hashNewTip ) ) ;
}
// Notify external listeners about the new tip.
GetMainSignals ( ) . UpdatedBlockTip ( hash NewTip) ;
GetMainSignals ( ) . UpdatedBlockTip ( pindex NewTip) ;
uiInterface . NotifyBlockTip ( hashNewTip ) ;
}
} while ( pindexMostWork ! = chainActive . Tip ( ) ) ;
@ -31,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 EraseFromWallet ( const uint256 & hash ) { }
virtual void ChainTip ( const CBlockIndex * pindex , const CBlock * pblock , ZCIncrementalMerkleTree tree , bool added ) { }
@ -47,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 erased transaction (currently disabled, requires transaction replacement). */
@ -11,7 +11,7 @@ CZMQAbstractNotifier::~CZMQAbstractNotifier()
assert ( ! psocket ) ;
}
bool CZMQAbstractNotifier : : NotifyBlock ( const uint256 & /*hash */)
bool CZMQAbstractNotifier : : NotifyBlock ( const CBlockIndex * /*CBlockIndex */)
{
return true ;
}
@ -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 :
@ -125,12 +125,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 + + ;
}
@ -9,6 +9,7 @@
# include <string>
# include <map>
class CBlockIndex ;
class CZMQAbstractNotifier ;
class CZMQNotificationInterface : public CValidationInterface
@ -24,7 +25,7 @@ protected:
// CValidationInterface
void SyncTransaction ( const CTransaction & tx , const CBlock * pblock ) ;
void UpdatedBlockTip ( const uint256 & newHashTip ) ;
void UpdatedBlockTip ( const CBlockIndex * pindex ) ;
private :
CZMQNotificationInterface ( ) ;
@ -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 ;
@ -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