aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordexX7 <dexx@bitwatch.co>2015-03-11 13:34:20 +0100
committerdexX7 <dexx@bitwatch.co>2015-03-11 14:33:29 +0100
commit317e66c741aef0fd272e50aa2e82ff192ca5f7e5 (patch)
treeef18c402c1f411a54a3a0fec568da8e2844c2fd0
parentd734d87b28ccbf2a4a4eb19a28285b5dea782105 (diff)
downloadbitcoin-317e66c741aef0fd272e50aa2e82ff192ca5f7e5.tar.xz
Initialization: set Boost path locale in main thread
The path locale is lazy initialized and to avoid deinitialization errors in multithreading environments, it is set explicitly by the main thread.
-rw-r--r--src/util.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/util.cpp b/src/util.cpp
index 792f00b61d..4192e44ae1 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -723,18 +723,18 @@ void RenameThread(const char* name)
void SetupEnvironment()
{
-#ifndef WIN32
- try
- {
-#if BOOST_FILESYSTEM_VERSION == 3
- boost::filesystem::path::codecvt(); // Raises runtime error if current locale is invalid
-#else // boost filesystem v2
- std::locale(); // Raises runtime error if current locale is invalid
-#endif
+ // On most POSIX systems (e.g. Linux, but not BSD) the environment's locale
+ // may be invalid, in which case the "C" locale is used as fallback.
+#if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
+ try {
+ std::locale(""); // Raises a runtime error if current locale is invalid
} catch (const std::runtime_error&) {
- setenv("LC_ALL", "C", 1); // Force C locale
+ std::locale::global(std::locale("C"));
}
#endif
+ // The path locale is lazy initialized and to avoid deinitialization errors
+ // in multithreading environments, it is set explicitly by the main thread.
+ boost::filesystem::path::imbue(std::locale());
}
void SetThreadPriority(int nPriority)