Skip to content

Commit

Permalink
bypass zc callback until container is initialized
Browse files Browse the repository at this point in the history
  • Loading branch information
goatpig committed May 6, 2017
1 parent f6312a8 commit a2a94e8
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 8 deletions.
8 changes: 8 additions & 0 deletions cppForSwig/BDM_supportClasses.cpp
Expand Up @@ -1838,6 +1838,8 @@ void ZeroConfContainer::init(
function<shared_ptr<set<ScrAddrFilter::AddrSyncState>>(void)> getAddrFilter,
bool clearMempool)
{
LOGINFO << "Enabling zero-conf tracking";

getMainAddressSet_ = getAddrFilter;
loadZeroConfMempool(clearMempool);

Expand All @@ -1859,11 +1861,16 @@ void ZeroConfContainer::init(
{
parserThreads_.push_back(thread(txthread));
}

zcEnabled_.store(true, memory_order_relaxed);
}

///////////////////////////////////////////////////////////////////////////////
void ZeroConfContainer::processInvTxVec(vector<InvEntry> invVec, bool extend)
{
if (!isEnabled())
return;

for (unsigned i = 0; i < invVec.size(); i++)
{
auto& entry = invVec[i];
Expand Down Expand Up @@ -2091,6 +2098,7 @@ void ZeroConfContainer::broadcastZC(const BinaryData& rawzc,
///////////////////////////////////////////////////////////////////////////////
void ZeroConfContainer::shutdown()
{
zcEnabled_.store(false, memory_order_relaxed);
newZcStack_.completed();

//shutdow invtx processing threads by pushing inventries of
Expand Down
5 changes: 5 additions & 0 deletions cppForSwig/BDM_supportClasses.h
Expand Up @@ -433,6 +433,7 @@ class ZeroConfContainer
mutex parserMutex_;

Stack<thread> parserThreads_;
atomic<bool> zcEnabled_;

private:
BulkFilterData ZCisMineBulkFilter(const Tx & tx,
Expand All @@ -458,6 +459,8 @@ class ZeroConfContainer
topId_(0), db_(db),
networkNode_(node)
{
zcEnabled_.store(false, memory_order_relaxed);

//register ZC callback
auto processInvTx = [this](vector<InvEntry> entryVec)->void
{
Expand Down Expand Up @@ -502,6 +505,8 @@ class ZeroConfContainer

void broadcastZC(const BinaryData& rawzc,
const string& bdvId, uint32_t timeout_sec = 5);

bool isEnabled(void) const { return zcEnabled_.load(memory_order_relaxed); }
};

//////
Expand Down
18 changes: 13 additions & 5 deletions cppForSwig/BlockUtils.cpp
Expand Up @@ -1202,9 +1202,8 @@ shared_future<bool> BlockDataManager::registerAddressBatch(
////////////////////////////////////////////////////////////////////////////////
void BlockDataManager::enableZeroConf(bool clearMempool)
{
SCOPED_TIMER("enableZeroConf");
LOGINFO << "Enabling zero-conf tracking ";
zcEnabled_ = true;
if (zeroConfCont_ == nullptr)
throw runtime_error("null zc object");

auto zcFilter = [this](void)->shared_ptr<set<ScrAddrFilter::AddrSyncState>>
{
Expand All @@ -1214,11 +1213,20 @@ void BlockDataManager::enableZeroConf(bool clearMempool)
zeroConfCont_->init(zcFilter, clearMempool);
}

////////////////////////////////////////////////////////////////////////////////
bool BlockDataManager::isZcEnabled(void) const
{
if (zeroConfCont_ == nullptr)
return false;

return zeroConfCont_->isEnabled();
}

////////////////////////////////////////////////////////////////////////////////
void BlockDataManager::disableZeroConf(void)
{
SCOPED_TIMER("disableZeroConf");
zcEnabled_ = false;
if (zeroConfCont_ == nullptr)
return;

zeroConfCont_->shutdown();
}
Expand Down
4 changes: 1 addition & 3 deletions cppForSwig/BlockUtils.h
Expand Up @@ -116,8 +116,6 @@ class BlockDataManager

class BDM_ScrAddrFilter;
shared_ptr<BDM_ScrAddrFilter> scrAddrData_;
bool zcEnabled_;

shared_ptr<Blockchain> blockchain_ = nullptr;

BDM_state BDMstate_ = BDM_offline;
Expand Down Expand Up @@ -209,7 +207,7 @@ class BlockDataManager

void enableZeroConf(bool cleanMempool = false);
void disableZeroConf(void);
bool isZcEnabled() const { return zcEnabled_; }
bool isZcEnabled(void) const;
shared_ptr<ZeroConfContainer> zeroConfCont(void) const
{
return zeroConfCont_;
Expand Down

0 comments on commit a2a94e8

Please sign in to comment.