|
|
|
@ -318,16 +318,17 @@ bool AddOrphanTx(const CTransaction& tx)
@@ -318,16 +318,17 @@ bool AddOrphanTx(const CTransaction& tx)
|
|
|
|
|
|
|
|
|
|
void static EraseOrphanTx(uint256 hash) |
|
|
|
|
{ |
|
|
|
|
if (!mapOrphanTransactions.count(hash)) |
|
|
|
|
map<uint256, CTransaction>::iterator it = mapOrphanTransactions.find(hash); |
|
|
|
|
if (it == mapOrphanTransactions.end()) |
|
|
|
|
return; |
|
|
|
|
const CTransaction& tx = mapOrphanTransactions[hash]; |
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, tx.vin) |
|
|
|
|
BOOST_FOREACH(const CTxIn& txin, it->second.vin) |
|
|
|
|
{ |
|
|
|
|
mapOrphanTransactionsByPrev[txin.prevout.hash].erase(hash); |
|
|
|
|
if (mapOrphanTransactionsByPrev[txin.prevout.hash].empty()) |
|
|
|
|
mapOrphanTransactionsByPrev.erase(txin.prevout.hash); |
|
|
|
|
map<uint256, set<uint256> >::iterator itPrev = mapOrphanTransactionsByPrev.find(txin.prevout.hash); |
|
|
|
|
itPrev->second.erase(hash); |
|
|
|
|
if (itPrev->second.empty()) |
|
|
|
|
mapOrphanTransactionsByPrev.erase(itPrev); |
|
|
|
|
} |
|
|
|
|
mapOrphanTransactions.erase(hash); |
|
|
|
|
mapOrphanTransactions.erase(it); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) |
|
|
|
@ -3585,9 +3586,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
@@ -3585,9 +3586,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
|
|
|
|
// Recursively process any orphan transactions that depended on this one
|
|
|
|
|
for (unsigned int i = 0; i < vWorkQueue.size(); i++) |
|
|
|
|
{ |
|
|
|
|
uint256 hashPrev = vWorkQueue[i]; |
|
|
|
|
for (set<uint256>::iterator mi = mapOrphanTransactionsByPrev[hashPrev].begin(); |
|
|
|
|
mi != mapOrphanTransactionsByPrev[hashPrev].end(); |
|
|
|
|
map<uint256, set<uint256> >::iterator itByPrev = mapOrphanTransactionsByPrev.find(vWorkQueue[i]); |
|
|
|
|
if (itByPrev == mapOrphanTransactionsByPrev.end()) |
|
|
|
|
continue; |
|
|
|
|
for (set<uint256>::iterator mi = itByPrev->second.begin(); |
|
|
|
|
mi != itByPrev->second.end(); |
|
|
|
|
++mi) |
|
|
|
|
{ |
|
|
|
|
const uint256& orphanHash = *mi; |
|
|
|
|