[PATCH] D50870: Close FileEntries of cached files in ModuleManager::addModule().
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 20 10:11:20 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL340188: Close FileEntries of cached files in ModuleManager::addModule(). (authored by adrian, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D50870?vs=161119&id=161501#toc
Repository:
rL LLVM
https://reviews.llvm.org/D50870
Files:
cfe/trunk/lib/Serialization/ModuleManager.cpp
Index: cfe/trunk/lib/Serialization/ModuleManager.cpp
===================================================================
--- cfe/trunk/lib/Serialization/ModuleManager.cpp
+++ cfe/trunk/lib/Serialization/ModuleManager.cpp
@@ -161,21 +161,24 @@
if (std::unique_ptr<llvm::MemoryBuffer> Buffer = lookupBuffer(FileName)) {
// The buffer was already provided for us.
NewModule->Buffer = &PCMCache->addBuffer(FileName, std::move(Buffer));
+ // Since the cached buffer is reused, it is safe to close the file
+ // descriptor that was opened while stat()ing the PCM in
+ // lookupModuleFile() above, it won't be needed any longer.
+ Entry->closeFile();
} else if (llvm::MemoryBuffer *Buffer = PCMCache->lookupBuffer(FileName)) {
NewModule->Buffer = Buffer;
+ // As above, the file descriptor is no longer needed.
+ Entry->closeFile();
} else {
// Open the AST file.
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Buf((std::error_code()));
if (FileName == "-") {
Buf = llvm::MemoryBuffer::getSTDIN();
} else {
- // Leave the FileEntry open so if it gets read again by another
- // ModuleManager it must be the same underlying file.
- // FIXME: Because FileManager::getFile() doesn't guarantee that it will
- // give us an open file, this may not be 100% reliable.
+ // Get a buffer of the file and close the file descriptor when done.
Buf = FileMgr.getBufferForFile(NewModule->File,
/*IsVolatile=*/false,
- /*ShouldClose=*/false);
+ /*ShouldClose=*/true);
}
if (!Buf) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50870.161501.patch
Type: text/x-patch
Size: 1687 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180820/5e6a22a8/attachment.bin>
More information about the llvm-commits
mailing list