@ -2029,8 +2029,9 @@ bool static FlushStateToDisk(CValidationState &state, FlushStateMode mode, int n
int64_t nMempoolSizeMax = GetArg ( " -maxmempool " , DEFAULT_MAX_MEMPOOL_SIZE ) * 1000000 ;
int64_t nMempoolSizeMax = GetArg ( " -maxmempool " , DEFAULT_MAX_MEMPOOL_SIZE ) * 1000000 ;
int64_t cacheSize = pcoinsTip - > DynamicMemoryUsage ( ) * DB_PEAK_USAGE_FACTOR ;
int64_t cacheSize = pcoinsTip - > DynamicMemoryUsage ( ) * DB_PEAK_USAGE_FACTOR ;
int64_t nTotalSpace = nCoinCacheUsage + std : : max < int64_t > ( nMempoolSizeMax - nMempoolUsage , 0 ) ;
int64_t nTotalSpace = nCoinCacheUsage + std : : max < int64_t > ( nMempoolSizeMax - nMempoolUsage , 0 ) ;
// The cache is large and we're within 10% and 100 MiB of the limit, but we have time now (not in the middle of a block processing).
// The cache is large and we're within 10% and 200 MiB or 50% and 50MiB of the limit, but we have time now (not in the middle of a block processing).
bool fCacheLarge = mode = = FLUSH_STATE_PERIODIC & & cacheSize > std : : max ( ( 9 * nTotalSpace ) / 10 , nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024 ) ;
bool fCacheLarge = mode = = FLUSH_STATE_PERIODIC & & cacheSize > std : : min ( std : : max ( nTotalSpace / 2 , nTotalSpace - MIN_BLOCK_COINSDB_USAGE * 1024 * 1024 ) ,
std : : max ( ( 9 * nTotalSpace ) / 10 , nTotalSpace - MAX_BLOCK_COINSDB_USAGE * 1024 * 1024 ) ) ;
// The cache is over the limit, we have to write now.
// The cache is over the limit, we have to write now.
bool fCacheCritical = mode = = FLUSH_STATE_IF_NEEDED & & cacheSize > nTotalSpace ;
bool fCacheCritical = mode = = FLUSH_STATE_IF_NEEDED & & cacheSize > nTotalSpace ;
// It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash.
// It's been a while since we wrote the block index to disk. Do this frequently, so we don't need to redownload after a crash.