Branch data Line data Source code
1 : : // Copyright (c) 2022 The Bitcoin Core developers 2 : : // Distributed under the MIT software license, see the accompanying 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : : 5 : : #include <node/validation_cache_args.h> 6 : : 7 : : #include <kernel/validation_cache_sizes.h> 8 : : 9 : : #include <common/args.h> 10 : : 11 : : #include <algorithm> 12 : : #include <cstddef> 13 : : #include <cstdint> 14 : : #include <memory> 15 : : #include <optional> 16 : : 17 : : using kernel::ValidationCacheSizes; 18 : : 19 : : namespace node { 20 : 889 : void ApplyArgsManOptions(const ArgsManager& argsman, ValidationCacheSizes& cache_sizes) 21 : : { 22 [ + - + - : 889 : if (auto max_size = argsman.GetIntArg("-maxsigcachesize")) { + - ] 23 : : // 1. When supplied with a max_size of 0, both InitSignatureCache and 24 : : // InitScriptExecutionCache create the minimum possible cache (2 25 : : // elements). Therefore, we can use 0 as a floor here. 26 : : // 2. Multiply first, divide after to avoid integer truncation. 27 : 0 : size_t clamped_size_each = std::max<int64_t>(*max_size, 0) * (1 << 20) / 2; 28 : 0 : cache_sizes = { 29 : 0 : .signature_cache_bytes = clamped_size_each, 30 : 0 : .script_execution_cache_bytes = clamped_size_each, 31 : : }; 32 : 0 : } 33 : 889 : } 34 : : } // namespace node