mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 18:53:23 -03:00
ArgsManager: return path by value from GetBlocksDirPath()
`ArgsManager::m_cached_blocks_path` is protected by `ArgsManager::cs_args` and returning a reference to it after releasing the mutex is unsafe. To resolve this, return a copy of the path. This has some performance penalty which is presumably ok, given that paths are a few 100s bytes at most and `GetBlocksDirPath()` is not called often. This silences the following (clang 18): ``` common/args.cpp:288:31: error: returning variable 'm_cached_blocks_path' by reference requires holding mutex 'cs_args' [-Werror,-Wthread-safety-reference-return] 288 | if (!path.empty()) return path; | ^ ``` Do the same with `ArgsManager::GetDataDir()`, `ArgsManager::GetDataDirBase()` and `ArgsManager::GetDataDirNet()`.
This commit is contained in:
parent
fa3d9304e8
commit
856c88776f
2 changed files with 6 additions and 6 deletions
|
@ -277,7 +277,7 @@ fs::path ArgsManager::GetPathArg(std::string arg, const fs::path& default_value)
|
||||||
return result.has_filename() ? result : result.parent_path();
|
return result.has_filename() ? result : result.parent_path();
|
||||||
}
|
}
|
||||||
|
|
||||||
const fs::path& ArgsManager::GetBlocksDirPath() const
|
fs::path ArgsManager::GetBlocksDirPath() const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
fs::path& path = m_cached_blocks_path;
|
fs::path& path = m_cached_blocks_path;
|
||||||
|
@ -302,7 +302,7 @@ const fs::path& ArgsManager::GetBlocksDirPath() const
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
const fs::path& ArgsManager::GetDataDir(bool net_specific) const
|
fs::path ArgsManager::GetDataDir(bool net_specific) const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
fs::path& path = net_specific ? m_cached_network_datadir_path : m_cached_datadir_path;
|
fs::path& path = net_specific ? m_cached_network_datadir_path : m_cached_datadir_path;
|
||||||
|
|
|
@ -215,21 +215,21 @@ protected:
|
||||||
*
|
*
|
||||||
* @return Blocks path which is network specific
|
* @return Blocks path which is network specific
|
||||||
*/
|
*/
|
||||||
const fs::path& GetBlocksDirPath() const;
|
fs::path GetBlocksDirPath() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get data directory path
|
* Get data directory path
|
||||||
*
|
*
|
||||||
* @return Absolute path on success, otherwise an empty path when a non-directory path would be returned
|
* @return Absolute path on success, otherwise an empty path when a non-directory path would be returned
|
||||||
*/
|
*/
|
||||||
const fs::path& GetDataDirBase() const { return GetDataDir(false); }
|
fs::path GetDataDirBase() const { return GetDataDir(false); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get data directory path with appended network identifier
|
* Get data directory path with appended network identifier
|
||||||
*
|
*
|
||||||
* @return Absolute path on success, otherwise an empty path when a non-directory path would be returned
|
* @return Absolute path on success, otherwise an empty path when a non-directory path would be returned
|
||||||
*/
|
*/
|
||||||
const fs::path& GetDataDirNet() const { return GetDataDir(true); }
|
fs::path GetDataDirNet() const { return GetDataDir(true); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear cached directory paths
|
* Clear cached directory paths
|
||||||
|
@ -420,7 +420,7 @@ private:
|
||||||
* @param net_specific Append network identifier to the returned path
|
* @param net_specific Append network identifier to the returned path
|
||||||
* @return Absolute path on success, otherwise an empty path when a non-directory path would be returned
|
* @return Absolute path on success, otherwise an empty path when a non-directory path would be returned
|
||||||
*/
|
*/
|
||||||
const fs::path& GetDataDir(bool net_specific) const;
|
fs::path GetDataDir(bool net_specific) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return -regtest/-signet/-testnet/-chain= setting as a ChainType enum if a
|
* Return -regtest/-signet/-testnet/-chain= setting as a ChainType enum if a
|
||||||
|
|
Loading…
Add table
Reference in a new issue