Skip to content

Commit

Permalink
Initialization: set Boost path locale in main thread
Browse files Browse the repository at this point in the history
The path locale is lazy initialized and to avoid deinitialization errors
in multithreading environments, it is set explicitly by the main thread.

Conflicts:
	src/util.cpp
Rebased-From: 317e66c
Github-Pull: #5877
  • Loading branch information
dexX7 authored and laanwj committed Mar 24, 2015
1 parent 10c09f9 commit c9e022b
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions src/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -713,19 +713,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
} catch(std::runtime_error &e)
{
setenv("LC_ALL", "C", 1); // Force C locale
// 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&) {
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)
Expand Down

0 comments on commit c9e022b

Please sign in to comment.