[ELF] toString(const InputFile *): synchronize toStringCache
The function may be called currently for diagnostics.
GitOrigin-RevId: e45a5696bb2ae5d12ada5000135e45366f6582b1
diff --git a/ELF/InputFiles.cpp b/ELF/InputFiles.cpp
index 3650065..c0961b4 100644
--- a/ELF/InputFiles.cpp
+++ b/ELF/InputFiles.cpp
@@ -47,14 +47,18 @@
// Returns "<internal>", "foo.a(bar.o)" or "baz.o".
std::string lld::toString(const InputFile *f) {
+ static std::mutex mu;
if (!f)
return "<internal>";
- if (f->toStringCache.empty()) {
- if (f->archiveName.empty())
- f->toStringCache = f->getName();
- else
- (f->archiveName + "(" + f->getName() + ")").toVector(f->toStringCache);
+ {
+ std::lock_guard<std::mutex> lock(mu);
+ if (f->toStringCache.empty()) {
+ if (f->archiveName.empty())
+ f->toStringCache = f->getName();
+ else
+ (f->archiveName + "(" + f->getName() + ")").toVector(f->toStringCache);
+ }
}
return std::string(f->toStringCache);
}