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.
0.13
dexX7 10 years ago
parent
commit
317e66c741
No known key found for this signature in database
GPG Key ID: 7675E31CF5719832
  1. 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…
Cancel
Save