Database micro-optimization for "tx" network message

Open database once per "tx" message, rather than multiple times,
in the case of orphan transaction presence.

As a side effect, a now-unused CTransaction::AcceptToMemoryPool()
variant is removed.
This commit is contained in:
Jeff Garzik 2012-04-13 17:48:15 -04:00 committed by Jeff Garzik
parent 6b8e7eefcc
commit 9925d34a49
2 changed files with 3 additions and 9 deletions

View file

@ -592,12 +592,6 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
return true; return true;
} }
bool CTransaction::AcceptToMemoryPool(bool fCheckInputs, bool* pfMissingInputs)
{
CTxDB txdb("r");
return AcceptToMemoryPool(txdb, fCheckInputs, pfMissingInputs);
}
uint64 nPooledTx = 0; uint64 nPooledTx = 0;
bool CTransaction::AddToMemoryPoolUnchecked() bool CTransaction::AddToMemoryPoolUnchecked()
@ -2522,6 +2516,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
{ {
vector<uint256> vWorkQueue; vector<uint256> vWorkQueue;
CDataStream vMsg(vRecv); CDataStream vMsg(vRecv);
CTxDB txdb("r");
CTransaction tx; CTransaction tx;
vRecv >> tx; vRecv >> tx;
@ -2529,7 +2524,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
pfrom->AddInventoryKnown(inv); pfrom->AddInventoryKnown(inv);
bool fMissingInputs = false; bool fMissingInputs = false;
if (tx.AcceptToMemoryPool(true, &fMissingInputs)) if (tx.AcceptToMemoryPool(txdb, true, &fMissingInputs))
{ {
SyncWithWallets(tx, NULL, true); SyncWithWallets(tx, NULL, true);
RelayMessage(inv, vMsg); RelayMessage(inv, vMsg);
@ -2549,7 +2544,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
CDataStream(vMsg) >> tx; CDataStream(vMsg) >> tx;
CInv inv(MSG_TX, tx.GetHash()); CInv inv(MSG_TX, tx.GetHash());
if (tx.AcceptToMemoryPool(true)) if (tx.AcceptToMemoryPool(txdb, true))
{ {
printf(" accepted orphan tx %s\n", inv.hash.ToString().substr(0,10).c_str()); printf(" accepted orphan tx %s\n", inv.hash.ToString().substr(0,10).c_str());
SyncWithWallets(tx, NULL, true); SyncWithWallets(tx, NULL, true);

View file

@ -684,7 +684,6 @@ public:
bool ClientConnectInputs(); bool ClientConnectInputs();
bool CheckTransaction() const; bool CheckTransaction() const;
bool AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs=true, bool* pfMissingInputs=NULL); bool AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs=true, bool* pfMissingInputs=NULL);
bool AcceptToMemoryPool(bool fCheckInputs=true, bool* pfMissingInputs=NULL);
protected: protected:
const CTxOut& GetOutputFor(const CTxIn& input, const MapPrevTx& inputs) const; const CTxOut& GetOutputFor(const CTxIn& input, const MapPrevTx& inputs) const;