Make sure rate-limiting code is thread-safe
This commit is contained in:
parent
5de8b54c51
commit
88abf70386
1 changed files with 17 additions and 10 deletions
7
main.cpp
7
main.cpp
|
@ -739,11 +739,17 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
|
|||
return error("AcceptToMemoryPool() : not enough fees");
|
||||
|
||||
// Continuously rate-limit free transactions
|
||||
// This mitigates 'penny-flooding' -- sending thousands of free transactions just to
|
||||
// be annoying or make other's transactions take longer to confirm.
|
||||
if (nFees < CENT)
|
||||
{
|
||||
static CCriticalSection cs;
|
||||
static double dFreeCount;
|
||||
static int64 nLastTime;
|
||||
int64 nNow = GetTime();
|
||||
|
||||
CRITICAL_BLOCK(cs)
|
||||
{
|
||||
// Use an exponentially decaying ~10-minute window:
|
||||
dFreeCount *= pow(1.0 - 1.0/600.0, (double)(nNow - nLastTime));
|
||||
nLastTime = nNow;
|
||||
|
@ -756,6 +762,7 @@ bool CTransaction::AcceptToMemoryPool(CTxDB& txdb, bool fCheckInputs, bool* pfMi
|
|||
dFreeCount += nSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Store transaction in memory
|
||||
CRITICAL_BLOCK(cs_mapTransactions)
|
||||
|
|
Loading…
Reference in a new issue