aboutsummaryrefslogtreecommitdiff
path: root/src/util.cpp
diff options
context:
space:
mode:
authordexX7 <[email protected]>2015-03-11 13:34:20 +0100
committerdexX7 <[email protected]>2015-03-11 14:33:29 +0100
commit317e66c741aef0fd272e50aa2e82ff192ca5f7e5 (patch)
treeef18c402c1f411a54a3a0fec568da8e2844c2fd0 /src/util.cpp
parentMerge pull request #5749 (diff)
downloaddiscoin-317e66c741aef0fd272e50aa2e82ff192ca5f7e5.tar.xz
discoin-317e66c741aef0fd272e50aa2e82ff192ca5f7e5.zip
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.
Diffstat (limited to 'src/util.cpp')
-rw-r--r--src/util.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/util.cpp b/src/util.cpp
index 792f00b61..4192e44ae 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)