Fix ZMQ Notification initialization and shutdown

Moves the call Initialize() from init.cpp to CreateWithArguments() and handles the
return value. Moves the call Shutdown() from init.cpp to destructor.
Changes Initialize() and Shutdown() to protected members.
This commit is contained in:
João Barbosa 2015-11-01 18:09:17 +00:00
parent 02a95be977
commit de0499d3b8
3 changed files with 10 additions and 6 deletions

View file

@ -222,7 +222,6 @@ void Shutdown()
#if ENABLE_ZMQ #if ENABLE_ZMQ
if (pzmqNotificationInterface) { if (pzmqNotificationInterface) {
UnregisterValidationInterface(pzmqNotificationInterface); UnregisterValidationInterface(pzmqNotificationInterface);
pzmqNotificationInterface->Shutdown();
delete pzmqNotificationInterface; delete pzmqNotificationInterface;
pzmqNotificationInterface = NULL; pzmqNotificationInterface = NULL;
} }
@ -1176,7 +1175,6 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
pzmqNotificationInterface = CZMQNotificationInterface::CreateWithArguments(mapArgs); pzmqNotificationInterface = CZMQNotificationInterface::CreateWithArguments(mapArgs);
if (pzmqNotificationInterface) { if (pzmqNotificationInterface) {
pzmqNotificationInterface->Initialize();
RegisterValidationInterface(pzmqNotificationInterface); RegisterValidationInterface(pzmqNotificationInterface);
} }
#endif #endif

View file

@ -21,8 +21,7 @@ CZMQNotificationInterface::CZMQNotificationInterface() : pcontext(NULL)
CZMQNotificationInterface::~CZMQNotificationInterface() CZMQNotificationInterface::~CZMQNotificationInterface()
{ {
// ensure Shutdown if Initialize is called Shutdown();
assert(!pcontext);
for (std::list<CZMQAbstractNotifier*>::iterator i=notifiers.begin(); i!=notifiers.end(); ++i) for (std::list<CZMQAbstractNotifier*>::iterator i=notifiers.begin(); i!=notifiers.end(); ++i)
{ {
@ -59,6 +58,12 @@ CZMQNotificationInterface* CZMQNotificationInterface::CreateWithArguments(const
{ {
notificationInterface = new CZMQNotificationInterface(); notificationInterface = new CZMQNotificationInterface();
notificationInterface->notifiers = notifiers; notificationInterface->notifiers = notifiers;
if (!notificationInterface->Initialize())
{
delete notificationInterface;
notificationInterface = NULL;
}
} }
return notificationInterface; return notificationInterface;
@ -99,7 +104,7 @@ bool CZMQNotificationInterface::Initialize()
return false; return false;
} }
return false; return true;
} }
// Called during shutdown sequence // Called during shutdown sequence

View file

@ -19,10 +19,11 @@ public:
static CZMQNotificationInterface* CreateWithArguments(const std::map<std::string, std::string> &args); static CZMQNotificationInterface* CreateWithArguments(const std::map<std::string, std::string> &args);
protected:
bool Initialize(); bool Initialize();
void Shutdown(); void Shutdown();
protected: // CValidationInterface // CValidationInterface
void SyncTransaction(const CTransaction &tx, const CBlock *pblock); void SyncTransaction(const CTransaction &tx, const CBlock *pblock);
void UpdatedBlockTip(const CBlockIndex *pindex); void UpdatedBlockTip(const CBlockIndex *pindex);