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.
This commit is contained in:
parent
d734d87b28
commit
317e66c741
18
src/util.cpp
18
src/util.cpp
@ -723,18 +723,18 @@ void RenameThread(const char* name)
|
|||||||
|
|
||||||
void SetupEnvironment()
|
void SetupEnvironment()
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
// On most POSIX systems (e.g. Linux, but not BSD) the environment's locale
|
||||||
try
|
// may be invalid, in which case the "C" locale is used as fallback.
|
||||||
{
|
#if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
|
||||||
#if BOOST_FILESYSTEM_VERSION == 3
|
try {
|
||||||
boost::filesystem::path::codecvt(); // Raises runtime error if current locale is invalid
|
std::locale(""); // Raises a runtime error if current locale is invalid
|
||||||
#else // boost filesystem v2
|
|
||||||
std::locale(); // Raises runtime error if current locale is invalid
|
|
||||||
#endif
|
|
||||||
} catch (const std::runtime_error&) {
|
} catch (const std::runtime_error&) {
|
||||||
setenv("LC_ALL", "C", 1); // Force C locale
|
std::locale::global(std::locale("C"));
|
||||||
}
|
}
|
||||||
#endif
|
#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)
|
void SetThreadPriority(int nPriority)
|
||||||
|
Loading…
Reference in New Issue
Block a user