diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2017-09-05 19:51:38 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2017-09-05 19:51:38 +0000 |
| commit | d0e9c167d8a6ab934bfa20ec0b774488176777a8 (patch) | |
| tree | 93e9c71a903eb8c81bf4712fa3a6a302af246c0f /llvm/tools | |
| parent | 420c4863a932cef3e7cb74fd1bf6cabbf6e5f62b (diff) | |
| download | bcm5719-llvm-d0e9c167d8a6ab934bfa20ec0b774488176777a8.tar.gz bcm5719-llvm-d0e9c167d8a6ab934bfa20ec0b774488176777a8.zip | |
LTO: Try to open cache files before renaming them.
It appears that a potential race between the cache client and the cache
pruner that I thought was unlikely actually happened in practice [1].
Try to avoid the race condition by opening the temporary file before
renaming it. Do this only on non-Windows platforms because we cannot
rename open files on Windows using the sys::fs::rename function.
[1] https://luci-logdog.appspot.com/v/?s=chromium%2Fbb%2Fchromium.memory%2FLinux_CFI%2F1610%2F%2B%2Frecipes%2Fsteps%2Fcompile%2F0%2Fstdout
Differential Revision: https://reviews.llvm.org/D37410
llvm-svn: 312567
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/gold/gold-plugin.cpp | 5 | ||||
| -rw-r--r-- | llvm/tools/llvm-lto2/llvm-lto2.cpp | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp index 4d4ff195364..947fc2d1652 100644 --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/tools/gold/gold-plugin.cpp @@ -908,10 +908,11 @@ static ld_plugin_status allSymbolsReadHook() { llvm::make_unique<llvm::raw_fd_ostream>(FD, true)); }; - auto AddBuffer = [&](size_t Task, std::unique_ptr<MemoryBuffer> MB) { + auto AddBuffer = [&](size_t Task, std::unique_ptr<MemoryBuffer> MB, + StringRef Path) { // Note that this requires that the memory buffers provided to AddBuffer are // backed by a file. - Filenames[Task] = MB->getBufferIdentifier(); + Filenames[Task] = Path; }; NativeObjectCache Cache; diff --git a/llvm/tools/llvm-lto2/llvm-lto2.cpp b/llvm/tools/llvm-lto2/llvm-lto2.cpp index 1c7038e6a2e..bc22b509b65 100644 --- a/llvm/tools/llvm-lto2/llvm-lto2.cpp +++ b/llvm/tools/llvm-lto2/llvm-lto2.cpp @@ -296,7 +296,8 @@ static int run(int argc, char **argv) { return llvm::make_unique<lto::NativeObjectStream>(std::move(S)); }; - auto AddBuffer = [&](size_t Task, std::unique_ptr<MemoryBuffer> MB) { + auto AddBuffer = [&](size_t Task, std::unique_ptr<MemoryBuffer> MB, + StringRef Path) { *AddStream(Task)->OS << MB->getBuffer(); }; |

