diff options
author | Kiminuo <kiminuo@protonmail.com> | 2021-04-09 08:16:36 +0200 |
---|---|---|
committer | Kiminuo <kiminuo@protonmail.com> | 2021-04-18 11:59:28 +0200 |
commit | b4190eff72c00e384ad238f9c2f10c8b91be969b (patch) | |
tree | 473640c5390ae891d1fb237b28dd351b9101f49f /src | |
parent | 83292e2a700afbf39936bd67bb89fab5398d0066 (diff) |
Change GetBlocksDir() to ArgsManager.GetBlocksDirPath().
Diffstat (limited to 'src')
-rw-r--r-- | src/init.cpp | 8 | ||||
-rw-r--r-- | src/qt/clientmodel.cpp | 2 | ||||
-rw-r--r-- | src/util/system.cpp | 57 | ||||
-rw-r--r-- | src/util/system.h | 10 | ||||
-rw-r--r-- | src/validation.cpp | 6 |
5 files changed, 43 insertions, 40 deletions
diff --git a/src/init.cpp b/src/init.cpp index 07e882c9df..741e70f748 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -637,7 +637,7 @@ static void CleanupBlockRevFiles() // Remove the rev files immediately and insert the blk file paths into an // ordered map keyed by block file index. LogPrintf("Removing unusable blk?????.dat and rev?????.dat files for -reindex with -prune\n"); - fs::path blocksdir = GetBlocksDir(); + fs::path blocksdir = gArgs.GetBlocksDirPath(); for (fs::directory_iterator it(blocksdir); it != fs::directory_iterator(); it++) { if (fs::is_regular_file(*it) && it->path().filename().string().length() == 12 && @@ -919,7 +919,7 @@ bool AppInitParameterInteraction(const ArgsManager& args) InitWarning(warnings); } - if (!fs::is_directory(GetBlocksDir())) { + if (!fs::is_directory(gArgs.GetBlocksDirPath())) { return InitError(strprintf(_("Specified blocks directory \"%s\" does not exist."), args.GetArg("-blocksdir", ""))); } @@ -1759,8 +1759,8 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) InitError(strprintf(_("Error: Disk space is low for %s"), GetDataDir())); return false; } - if (!CheckDiskSpace(GetBlocksDir())) { - InitError(strprintf(_("Error: Disk space is low for %s"), GetBlocksDir())); + if (!CheckDiskSpace(gArgs.GetBlocksDirPath())) { + InitError(strprintf(_("Error: Disk space is low for %s"), gArgs.GetBlocksDirPath())); return false; } diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index b244bc94f2..f2c555de52 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -216,7 +216,7 @@ QString ClientModel::dataDir() const QString ClientModel::blocksDir() const { - return GUIUtil::boostPathToQString(GetBlocksDir()); + return GUIUtil::boostPathToQString(gArgs.GetBlocksDirPath()); } void ClientModel::updateBanlist() 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) diff --git a/src/util/system.h b/src/util/system.h index a49055b891..fcdb04bb8d 100644 --- a/src/util/system.h +++ b/src/util/system.h @@ -91,8 +91,6 @@ void ReleaseDirectoryLocks(); bool TryCreateDirectories(const fs::path& p); fs::path GetDefaultDataDir(); -// The blocks directory is always net specific. -const fs::path &GetBlocksDir(); const fs::path &GetDataDir(bool fNetSpecific = true); // Return true if -datadir option points to a valid directory or is not specified. bool CheckDataDirOption(); @@ -200,6 +198,7 @@ protected: std::map<OptionsCategory, std::map<std::string, Arg>> m_available_args GUARDED_BY(cs_args); bool m_accept_any_command GUARDED_BY(cs_args){true}; std::list<SectionInfo> m_config_sections GUARDED_BY(cs_args); + fs::path m_cached_blocks_path GUARDED_BY(cs_args); mutable fs::path m_cached_datadir_path GUARDED_BY(cs_args); mutable fs::path m_cached_network_datadir_path GUARDED_BY(cs_args); @@ -266,6 +265,13 @@ public: std::optional<const Command> GetCommand() const; /** + * Get blocks directory path + * + * @return Blocks path which is network specific + */ + const fs::path& GetBlocksDirPath(); + + /** * Get data directory path * * @param net_specific Append network identifier to the returned path diff --git a/src/validation.cpp b/src/validation.cpp index 332cb581b8..2bf505e26b 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2204,7 +2204,7 @@ bool CChainState::FlushStateToDisk( // Write blocks and block index to disk. if (fDoFullFlush || fPeriodicWrite) { // Depend on nMinDiskSpace to ensure we can write block index - if (!CheckDiskSpace(GetBlocksDir())) { + if (!CheckDiskSpace(gArgs.GetBlocksDirPath())) { return AbortNode(state, "Disk space is too low!", _("Disk space is too low!")); } { @@ -3890,12 +3890,12 @@ void BlockManager::FindFilesToPrune(std::set<int>& setFilesToPrune, uint64_t nPr static FlatFileSeq BlockFileSeq() { - return FlatFileSeq(GetBlocksDir(), "blk", gArgs.GetBoolArg("-fastprune", false) ? 0x4000 /* 16kb */ : BLOCKFILE_CHUNK_SIZE); + return FlatFileSeq(gArgs.GetBlocksDirPath(), "blk", gArgs.GetBoolArg("-fastprune", false) ? 0x4000 /* 16kb */ : BLOCKFILE_CHUNK_SIZE); } static FlatFileSeq UndoFileSeq() { - return FlatFileSeq(GetBlocksDir(), "rev", UNDOFILE_CHUNK_SIZE); + return FlatFileSeq(gArgs.GetBlocksDirPath(), "rev", UNDOFILE_CHUNK_SIZE); } FILE* OpenBlockFile(const FlatFilePos &pos, bool fReadOnly) { |