diff options
author | Jeff Garzik <jeff@garzik.org> | 2012-04-13 18:20:44 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2012-04-15 14:43:19 -0400 |
commit | ca4c4c53a8b1417563c72da0aea626f111a7f25d (patch) | |
tree | 50cf1fd707a6093269d0eaba6cab6df558ea45b6 | |
parent | d01903e7511c143f8844bd83da884e7c9d25241e (diff) |
CTxMemPool: add helper methods, to reduce global mempool.mapTx accesses
-rw-r--r-- | src/main.cpp | 24 | ||||
-rw-r--r-- | src/main.h | 10 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/main.cpp b/src/main.cpp index facf355ec0..1c040bdee7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -702,7 +702,7 @@ bool CWalletTx::AcceptWalletTransaction(CTxDB& txdb, bool fCheckInputs) if (!tx.IsCoinBase()) { uint256 hash = tx.GetHash(); - if (!mempool.mapTx.count(hash) && !txdb.ContainsTx(hash)) + if (!mempool.exists(hash) && !txdb.ContainsTx(hash)) tx.AcceptToMemoryPool(txdb, fCheckInputs); } } @@ -1018,9 +1018,9 @@ bool CTransaction::FetchInputs(CTxDB& txdb, const map<uint256, CTxIndex>& mapTes // Get prev tx from single transactions in memory { LOCK(mempool.cs); - if (!mempool.mapTx.count(prevout.hash)) - return error("FetchInputs() : %s mempool.mapTx prev not found %s", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); - txPrev = mempool.mapTx[prevout.hash]; + if (!mempool.exists(prevout.hash)) + return error("FetchInputs() : %s mempool Tx prev not found %s", GetHash().ToString().substr(0,10).c_str(), prevout.hash.ToString().substr(0,10).c_str()); + txPrev = mempool.lookup(prevout.hash); } if (!fFound) txindex.vSpent.resize(txPrev.vout.size()); @@ -1189,9 +1189,9 @@ bool CTransaction::ClientConnectInputs() { // Get prev tx from single transactions in memory COutPoint prevout = vin[i].prevout; - if (!mempool.mapTx.count(prevout.hash)) + if (!mempool.exists(prevout.hash)) return false; - CTransaction& txPrev = mempool.mapTx[prevout.hash]; + CTransaction& txPrev = mempool.lookup(prevout.hash); if (prevout.n >= txPrev.vout.size()) return false; @@ -2136,8 +2136,16 @@ bool static AlreadyHave(CTxDB& txdb, const CInv& inv) { switch (inv.type) { - case MSG_TX: return mempool.mapTx.count(inv.hash) || mapOrphanTransactions.count(inv.hash) || txdb.ContainsTx(inv.hash); - case MSG_BLOCK: return mapBlockIndex.count(inv.hash) || mapOrphanBlocks.count(inv.hash); + case MSG_TX: + { + LOCK(mempool.cs); + return mempool.exists(inv.hash) || + mapOrphanTransactions.count(inv.hash) || + txdb.ContainsTx(inv.hash); + } + + case MSG_BLOCK: + return mapBlockIndex.count(inv.hash) || mapOrphanBlocks.count(inv.hash); } // Don't know what it is, just say we already got one return true; diff --git a/src/main.h b/src/main.h index 29bd358c5c..30bf1dd698 100644 --- a/src/main.h +++ b/src/main.h @@ -1621,6 +1621,16 @@ public: LOCK(cs); return mapTx.size(); } + + bool exists(uint256 hash) + { + return (mapTx.count(hash) != 0); + } + + CTransaction& lookup(uint256 hash) + { + return mapTx[hash]; + } }; extern CTxMemPool mempool; |