Fix a large number of cases where we copy construct a shared_ptr just to destroy it.

This commit is contained in:
JoelKatz
2012-08-15 04:01:22 -07:00
parent 11f7012d09
commit abf41dd4de
10 changed files with 41 additions and 46 deletions

View File

@@ -20,7 +20,7 @@ PeerSet::PeerSet(const uint256& hash, int interval) : mHash(hash), mTimerInterva
assert((mTimerInterval > 10) && (mTimerInterval < 30000));
}
void PeerSet::peerHas(Peer::pointer ptr)
void PeerSet::peerHas(const Peer::pointer& ptr)
{
boost::recursive_mutex::scoped_lock sl(mLock);
std::vector< boost::weak_ptr<Peer> >::iterator it = mPeers.begin();
@@ -40,7 +40,7 @@ void PeerSet::peerHas(Peer::pointer ptr)
newPeer(ptr);
}
void PeerSet::badPeer(Peer::pointer ptr)
void PeerSet::badPeer(const Peer::pointer& ptr)
{
boost::recursive_mutex::scoped_lock sl(mLock);
std::vector< boost::weak_ptr<Peer> >::iterator it = mPeers.begin();
@@ -142,7 +142,7 @@ void LedgerAcquire::addOnComplete(boost::function<void (LedgerAcquire::pointer)>
mLock.unlock();
}
void LedgerAcquire::trigger(Peer::pointer peer, bool timer)
void LedgerAcquire::trigger(const Peer::pointer& peer, bool timer)
{
if (mAborted || mComplete || mFailed)
return;
@@ -435,7 +435,7 @@ void LedgerAcquireMaster::dropLedger(const uint256& hash)
mLedgers.erase(hash);
}
bool LedgerAcquireMaster::gotLedgerData(newcoin::TMLedgerData& packet, Peer::pointer peer)
bool LedgerAcquireMaster::gotLedgerData(newcoin::TMLedgerData& packet, const Peer::pointer& peer)
{
#ifdef LA_DEBUG
Log(lsTRACE) << "got data for acquiring ledger ";

View File

@@ -41,12 +41,12 @@ public:
void progress() { mProgress = true; }
void peerHas(Peer::pointer);
void badPeer(Peer::pointer);
void peerHas(const Peer::pointer&);
void badPeer(const Peer::pointer&);
void resetTimer();
protected:
virtual void newPeer(Peer::pointer) = 0;
virtual void newPeer(const Peer::pointer&) = 0;
virtual void onTimer(void) = 0;
virtual boost::weak_ptr<PeerSet> pmDowncast() = 0;
@@ -72,7 +72,7 @@ protected:
void done();
void onTimer();
void newPeer(Peer::pointer peer) { trigger(peer, false); }
void newPeer(const Peer::pointer& peer) { trigger(peer, false); }
boost::weak_ptr<PeerSet> pmDowncast();
@@ -92,7 +92,7 @@ public:
bool takeTxRootNode(const std::vector<unsigned char>& data);
bool takeAsNode(const std::list<SHAMapNode>& IDs, const std::list<std::vector<unsigned char> >& data);
bool takeAsRootNode(const std::vector<unsigned char>& data);
void trigger(Peer::pointer, bool timer);
void trigger(const Peer::pointer&, bool timer);
};
class LedgerAcquireMaster
@@ -108,7 +108,7 @@ public:
LedgerAcquire::pointer find(const uint256& hash);
bool hasLedger(const uint256& ledgerHash);
void dropLedger(const uint256& ledgerHash);
bool gotLedgerData(newcoin::TMLedgerData& packet, Peer::pointer);
bool gotLedgerData(newcoin::TMLedgerData& packet, const Peer::pointer&);
};
#endif

View File

@@ -41,7 +41,7 @@ boost::weak_ptr<PeerSet> TransactionAcquire::pmDowncast()
return boost::shared_polymorphic_downcast<PeerSet, TransactionAcquire>(shared_from_this());
}
void TransactionAcquire::trigger(Peer::pointer peer, bool timer)
void TransactionAcquire::trigger(const Peer::pointer& peer, bool timer)
{
if (mComplete || mFailed)
return;

View File

@@ -27,11 +27,11 @@ protected:
SHAMap::pointer mMap;
bool mHaveRoot;
void onTimer() { trigger(Peer::pointer(), true); }
void newPeer(Peer::pointer peer) { trigger(peer, false); }
void onTimer() { trigger(Peer::pointer(), true); }
void newPeer(const Peer::pointer& peer) { trigger(peer, false); }
void done();
void trigger(Peer::pointer, bool timer);
void trigger(const Peer::pointer&, bool timer);
boost::weak_ptr<PeerSet> pmDowncast();
public:

View File

@@ -61,7 +61,7 @@ LedgerEntryAction LedgerEntrySet::hasEntry(const uint256& index) const
return it->second.mAction;
}
void LedgerEntrySet::entryCache(SLE::pointer& sle)
void LedgerEntrySet::entryCache(const SLE::pointer& sle)
{
boost::unordered_map<uint256, LedgerEntrySetEntry>::iterator it = mEntries.find(sle->getIndex());
if (it == mEntries.end())
@@ -82,7 +82,7 @@ void LedgerEntrySet::entryCache(SLE::pointer& sle)
}
}
void LedgerEntrySet::entryCreate(SLE::pointer& sle)
void LedgerEntrySet::entryCreate(const SLE::pointer& sle)
{
boost::unordered_map<uint256, LedgerEntrySetEntry>::iterator it = mEntries.find(sle->getIndex());
if (it == mEntries.end())
@@ -112,7 +112,7 @@ void LedgerEntrySet::entryCreate(SLE::pointer& sle)
}
}
void LedgerEntrySet::entryModify(SLE::pointer& sle)
void LedgerEntrySet::entryModify(const SLE::pointer& sle)
{
boost::unordered_map<uint256, LedgerEntrySetEntry>::iterator it = mEntries.find(sle->getIndex());
if (it == mEntries.end())
@@ -147,7 +147,7 @@ void LedgerEntrySet::entryModify(SLE::pointer& sle)
}
}
void LedgerEntrySet::entryDelete(SLE::pointer& sle, bool unfunded)
void LedgerEntrySet::entryDelete(const SLE::pointer& sle, bool unfunded)
{
boost::unordered_map<uint256, LedgerEntrySetEntry>::iterator it = mEntries.find(sle->getIndex());
if (it == mEntries.end())

View File

@@ -23,7 +23,7 @@ public:
LedgerEntryAction mAction;
int mSeq;
LedgerEntrySetEntry(SLE::pointer e, LedgerEntryAction a, int s) : mEntry(e), mAction(a), mSeq(s) { ; }
LedgerEntrySetEntry(const SLE::pointer& e, LedgerEntryAction a, int s) : mEntry(e), mAction(a), mSeq(s) { ; }
};
@@ -53,10 +53,10 @@ public:
// basic entry functions
SLE::pointer getEntry(const uint256& index, LedgerEntryAction&);
LedgerEntryAction hasEntry(const uint256& index) const;
void entryCache(SLE::pointer&); // Add this entry to the cache
void entryCreate(SLE::pointer&); // This entry will be created
void entryDelete(SLE::pointer&, bool unfunded);
void entryModify(SLE::pointer&); // This entry will be modified
void entryCache(const SLE::pointer&); // Add this entry to the cache
void entryCreate(const SLE::pointer&); // This entry will be created
void entryDelete(const SLE::pointer&, bool unfunded);
void entryModify(const SLE::pointer&); // This entry will be modified
Json::Value getJson(int) const;
void addRawMeta(Serializer&);

View File

@@ -260,7 +260,7 @@ void Peer::connected(const boost::system::error_code& error)
}
}
void Peer::sendPacketForce(PackedMessage::pointer packet)
void Peer::sendPacketForce(const PackedMessage::pointer& packet)
{
if (!mDetaching)
{
@@ -273,7 +273,7 @@ void Peer::sendPacketForce(PackedMessage::pointer packet)
}
}
void Peer::sendPacket(PackedMessage::pointer packet)
void Peer::sendPacket(const PackedMessage::pointer& packet)
{
if (packet)
{

View File

@@ -30,7 +30,7 @@ public:
static const int psbNoLedgers = 4, psbNoTransactions = 5, psbDownLevel = 6;
void handleConnect(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator it);
static void sHandleConnect(Peer::pointer ptr, const boost::system::error_code& error,
static void sHandleConnect(const Peer::pointer& ptr, const boost::system::error_code& error,
boost::asio::ip::tcp::resolver::iterator it)
{ ptr->handleConnect(error, it); }
@@ -52,11 +52,11 @@ private:
boost::asio::deadline_timer mVerifyTimer;
void handleStart(const boost::system::error_code& ecResult);
static void sHandleStart(Peer::pointer ptr, const boost::system::error_code& ecResult)
static void sHandleStart(const Peer::pointer& ptr, const boost::system::error_code& ecResult)
{ ptr->handleStart(ecResult); }
void handleVerifyTimer(const boost::system::error_code& ecResult);
static void sHandleVerifyTimer(Peer::pointer ptr, const boost::system::error_code& ecResult)
static void sHandleVerifyTimer(const Peer::pointer& ptr, const boost::system::error_code& ecResult)
{ ptr->handleVerifyTimer(ecResult); }
protected:
@@ -70,26 +70,26 @@ protected:
Peer(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx);
void handleShutdown(const boost::system::error_code& error) { ; }
static void sHandleShutdown(Peer::pointer ptr, const boost::system::error_code& error)
static void sHandleShutdown(const Peer::pointer& ptr, const boost::system::error_code& error)
{ ptr->handleShutdown(error); }
void handle_write(const boost::system::error_code& error, size_t bytes_transferred);
static void sHandle_write(Peer::pointer ptr, const boost::system::error_code& error, size_t bytes_transferred)
static void sHandle_write(const Peer::pointer& ptr, const boost::system::error_code& error, size_t bytes_transferred)
{ ptr->handle_write(error, bytes_transferred); }
void handle_read_header(const boost::system::error_code& error);
static void sHandle_read_header(Peer::pointer ptr, const boost::system::error_code& error)
static void sHandle_read_header(const Peer::pointer& ptr, const boost::system::error_code& error)
{ ptr->handle_read_header(error); }
void handle_read_body(const boost::system::error_code& error);
static void sHandle_read_body(Peer::pointer ptr, const boost::system::error_code& error)
static void sHandle_read_body(const Peer::pointer& ptr, const boost::system::error_code& error)
{ ptr->handle_read_body(error); }
void processReadBuffer();
void start_read_header();
void start_read_body(unsigned msg_len);
void sendPacketForce(PackedMessage::pointer packet);
void sendPacketForce(const PackedMessage::pointer& packet);
void sendHello();
@@ -139,12 +139,12 @@ public:
void connect(const std::string strIp, int iPort);
void connected(const boost::system::error_code& error);
void detach(const char *);
bool samePeer(Peer::pointer p) { return samePeer(*p); }
bool samePeer(const Peer& p) { return this == &p; }
bool samePeer(const Peer::pointer& p) { return samePeer(*p); }
bool samePeer(const Peer& p) { return this == &p; }
void sendPacket(PackedMessage::pointer packet);
void sendLedgerProposal(Ledger::pointer ledger);
void sendFullLedger(Ledger::pointer ledger);
void sendPacket(const PackedMessage::pointer& packet);
void sendLedgerProposal(const Ledger::pointer& ledger);
void sendFullLedger(const Ledger::pointer& ledger);
void sendGetFullLedger(uint256& hash);
void sendGetPeers();
@@ -153,11 +153,6 @@ public:
Json::Value getJson();
bool isConnected() const { return mHelloed && !mDetaching; }
//static PackedMessage::pointer createFullLedger(Ledger::pointer ledger);
static PackedMessage::pointer createLedgerProposal(Ledger::pointer ledger);
static PackedMessage::pointer createValidation(Ledger::pointer ledger);
static PackedMessage::pointer createGetFullLedger(uint256& hash);
uint256 getClosedLedgerHash() const { return mClosedLedgerHash; }
bool hasLedger(const uint256& hash) const;
NewcoinAddress getNodePublic() const { return mNodePublic; }

View File

@@ -7,7 +7,7 @@
// #define VC_DEBUG
bool ValidationCollection::addValidation(SerializedValidation::pointer& val)
bool ValidationCollection::addValidation(const SerializedValidation::pointer& val)
{
NewcoinAddress signer = val->getSignerPublic();
bool isCurrent = false;

View File

@@ -17,7 +17,7 @@ class ValidationPair
public:
SerializedValidation::pointer oldest, newest;
ValidationPair(SerializedValidation::pointer v) : newest(v) { ; }
ValidationPair(const SerializedValidation::pointer& v) : newest(v) { ; }
};
class ValidationCollection
@@ -38,7 +38,7 @@ protected:
public:
ValidationCollection() : mWriting(false) { ; }
bool addValidation(SerializedValidation::pointer&);
bool addValidation(const SerializedValidation::pointer&);
ValidationSet getValidations(const uint256& ledger);
void getValidationCount(const uint256& ledger, bool currentOnly, int& trusted, int& untrusted);