Browse Source
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.
try
dexX7
10 years ago
No known key found for this signature in database
GPG Key ID: 7675E31CF5719832
1 changed files with
9 additions and
9 deletions
-
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) |
|
|
|