diff --git a/src/mutex.inl b/src/mutex.inl index 3a279666..4a295633 100644 --- a/src/mutex.inl +++ b/src/mutex.inl @@ -61,8 +61,10 @@ inline void* new_critical_section() inline void* new_mutex(const char* name) { #if defined(BOOST_NO_ANSI_APIS) - USES_CONVERSION; - HANDLE mutex = CreateMutexW(0, 0, A2CW(name)); + int num_wide_chars = (strlen(name) + 1); + LPWSTR wide_name = (LPWSTR)_alloca( num_wide_chars * 2 ); + ::MultiByteToWideChar(CP_ACP, 0, name, -1, wide_name, num_wide_chars); + HANDLE mutex = CreateMutexW(0, 0, wide_name); #else HANDLE mutex = CreateMutexA(0, 0, name); #endif diff --git a/src/once.cpp b/src/once.cpp index bbbfae60..54820694 100644 --- a/src/once.cpp +++ b/src/once.cpp @@ -18,6 +18,7 @@ using std::size_t; # endif # include +# include "mutex.inl" # if defined(BOOST_NO_STRINGSTREAM) # include @@ -137,11 +138,7 @@ void call_once(void (*func)(), once_flag& flag) << &flag << std::ends; unfreezer unfreeze(strm); -# if defined (BOOST_NO_ANSI_APIS) - USES_CONVERSION; - HANDLE mutex = CreateMutexW(NULL, FALSE, A2CW(strm.str())); -# else - HANDLE mutex = CreateMutexA(NULL, FALSE, strm.str()); + HANDLE mutex=new_mutex(strm.str()); # endif #else # if defined (BOOST_NO_ANSI_APIS)