diff options
-rw-r--r-- | lld/COFF/Strings.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lld/COFF/Strings.cpp b/lld/COFF/Strings.cpp index d0558413f67..6986f4b391d 100644 --- a/lld/COFF/Strings.cpp +++ b/lld/COFF/Strings.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "Strings.h" +#include <mutex> #if defined(_MSC_VER) #include <Windows.h> @@ -21,6 +22,10 @@ using namespace llvm; Optional<std::string> coff::demangle(StringRef S) { #if defined(_MSC_VER) + // UnDecorateSymbolName is not thread-safe, so we need a mutex. + static std::mutex Mu; + std::lock_guard<std::mutex> Lock(mu); + char Buf[4096]; if (S.startswith("?")) if (size_t Len = UnDecorateSymbolName(S.str().c_str(), Buf, sizeof(Buf), 0)) |