diff options
Diffstat (limited to 'src/util/system.cpp')
-rw-r--r-- | src/util/system.cpp | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/src/util/system.cpp b/src/util/system.cpp index 0a2ece7b10..474c4893f9 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -388,6 +388,32 @@ std::optional<unsigned int> ArgsManager::GetArgFlags(const std::string& name) co return std::nullopt; } +const fs::path& ArgsManager::GetBlocksDirPath() +{ + LOCK(cs_args); + fs::path& path = m_cached_blocks_path; + + // Cache the path to avoid calling fs::create_directories on every call of + // this function + if (!path.empty()) return path; + + if (IsArgSet("-blocksdir")) { + path = fs::system_complete(GetArg("-blocksdir", "")); + if (!fs::is_directory(path)) { + path = ""; + return path; + } + } else { + path = GetDataDirPath(false); + } + + path /= BaseParams().DataDir(); + path /= "blocks"; + fs::create_directories(path); + path = StripRedundantLastElementsOfPath(path); + return path; +} + const fs::path& ArgsManager::GetDataDirPath(bool net_specific) const { LOCK(cs_args); @@ -425,6 +451,7 @@ void ArgsManager::ClearDatadirPathCache() m_cached_datadir_path = fs::path(); m_cached_network_datadir_path = fs::path(); + m_cached_blocks_path = fs::path(); } std::optional<const ArgsManager::Command> ArgsManager::GetCommand() const @@ -775,35 +802,6 @@ fs::path GetDefaultDataDir() #endif } -static fs::path g_blocks_path_cache_net_specific; -static RecursiveMutex csPathCached; - -const fs::path &GetBlocksDir() -{ - LOCK(csPathCached); - fs::path &path = g_blocks_path_cache_net_specific; - - // Cache the path to avoid calling fs::create_directories on every call of - // this function - if (!path.empty()) return path; - - if (gArgs.IsArgSet("-blocksdir")) { - path = fs::system_complete(gArgs.GetArg("-blocksdir", "")); - if (!fs::is_directory(path)) { - path = ""; - return path; - } - } else { - path = GetDataDir(false); - } - - path /= BaseParams().DataDir(); - path /= "blocks"; - fs::create_directories(path); - path = StripRedundantLastElementsOfPath(path); - return path; -} - const fs::path &GetDataDir(bool fNetSpecific) { return gArgs.GetDataDirPath(fNetSpecific); @@ -818,7 +816,6 @@ bool CheckDataDirOption() void ClearDatadirCache() { gArgs.ClearDatadirPathCache(); - g_blocks_path_cache_net_specific = fs::path(); } fs::path GetConfigFile(const std::string& confPath) |