[PATCH] D120073: [LLD] Fix for race condition.
Alexander Yermolovich via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 17 10:13:27 PST 2022
ayermolo updated this revision to Diff 409707.
ayermolo added a comment.
fixup
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D120073/new/
https://reviews.llvm.org/D120073
Files:
lld/ELF/InputSection.cpp
lld/ELF/InputSection.h
Index: lld/ELF/InputSection.h
===================================================================
--- lld/ELF/InputSection.h
+++ lld/ELF/InputSection.h
@@ -157,8 +157,7 @@
}
ArrayRef<uint8_t> data() const {
- if (uncompressedSize >= 0)
- uncompress();
+ uncompress();
return rawData;
}
Index: lld/ELF/InputSection.cpp
===================================================================
--- lld/ELF/InputSection.cpp
+++ lld/ELF/InputSection.cpp
@@ -118,17 +118,24 @@
void InputSectionBase::uncompress() const {
size_t size = uncompressedSize;
char *uncompressedBuf;
+ static std::mutex mu;
{
- static std::mutex mu;
std::lock_guard<std::mutex> lock(mu);
+ if (uncompressedSize < 0)
+ return;
uncompressedBuf = bAlloc().Allocate<char>(size);
}
if (Error e = zlib::uncompress(toStringRef(rawData), uncompressedBuf, size))
fatal(toString(this) +
": uncompress failed: " + llvm::toString(std::move(e)));
- rawData = makeArrayRef((uint8_t *)uncompressedBuf, size);
- uncompressedSize = -1;
+
+ {
+ std::lock_guard<std::mutex> lock(mu);
+ if (uncompressedSize >= 0)
+ rawData = makeArrayRef((uint8_t *)uncompressedBuf, size);
+ uncompressedSize = -1;
+ }
}
template <class ELFT> RelsOrRelas<ELFT> InputSectionBase::relsOrRelas() const {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D120073.409707.patch
Type: text/x-patch
Size: 1337 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220217/f9e89a15/attachment.bin>
More information about the llvm-commits
mailing list