diff --git a/src/avalanche/processor.h b/src/avalanche/processor.h --- a/src/avalanche/processor.h +++ b/src/avalanche/processor.h @@ -288,9 +288,7 @@ CPubKey getSessionPubKey() const; bool sendHello(CNode *pfrom) const; - std::shared_ptr getProof(const ProofId &proofid) const; std::shared_ptr getLocalProof() const; - std::shared_ptr getOrphan(const ProofId &proofid) const; /* * Return whether the avalanche service flag should be set. diff --git a/src/avalanche/processor.cpp b/src/avalanche/processor.cpp --- a/src/avalanche/processor.cpp +++ b/src/avalanche/processor.cpp @@ -558,20 +558,10 @@ return true; } -std::shared_ptr Processor::getProof(const ProofId &proofid) const { - LOCK(cs_peerManager); - return peerManager->getProof(proofid); -} - std::shared_ptr Processor::getLocalProof() const { return peerData ? peerData->proof : nullptr; } -std::shared_ptr Processor::getOrphan(const ProofId &proofid) const { - LOCK(cs_peerManager); - return peerManager->getOrphan(proofid); -} - bool Processor::startEventLoop(CScheduler &scheduler) { return eventLoop.startEventLoop( scheduler, [this]() { this->runEventLoop(); }, AVALANCHE_TIME_STEP); diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1798,9 +1798,14 @@ static bool AlreadyHaveProof(const avalanche::ProofId &proofid) { assert(g_avalanche); + + const bool hasProof = + g_avalanche->withPeerManager([&proofid](avalanche::PeerManager &pm) { + return pm.getProof(proofid) || pm.getOrphan(proofid); + }); + LOCK(cs_rejectedProofs); - return rejectedProofs->contains(proofid) || - g_avalanche->getProof(proofid) || g_avalanche->getOrphan(proofid); + return hasProof || rejectedProofs->contains(proofid); } void RelayTransaction(const TxId &txid, const CConnman &connman) { diff --git a/src/rpc/avalanche.cpp b/src/rpc/avalanche.cpp --- a/src/rpc/avalanche.cpp +++ b/src/rpc/avalanche.cpp @@ -514,11 +514,14 @@ avalanche::ProofId::fromHex(request.params[0].get_str()); bool isOrphan = false; - auto proof = g_avalanche->getProof(proofid); - if (!proof) { - proof = g_avalanche->getOrphan(proofid); - isOrphan = true; - } + auto proof = g_avalanche->withPeerManager([&](avalanche::PeerManager &pm) { + auto proof = pm.getProof(proofid); + if (!proof) { + proof = pm.getOrphan(proofid); + isOrphan = true; + } + return proof; + }); if (!proof) { throw JSONRPCError(RPC_INVALID_PARAMETER, "Proof not found");