forked from OSchip/llvm-project
[Support] [Windows] Don't cancel delete if we failed to set delete
Following up on commit177176f75c
, if we failed to setDeleteDisposition(true) during TempFile creation, then don't try to setDeleteDisposition(false) during TempFile::keep, since it will likely fail as well. Instead of letting TempFile::keep just fail, we should let it go ahead and try renaming the file. This fixes an issue we are seeing when running clang-cl.exe through the Incredibuild distributed build system. We're seeing that renaming temporary object files would fail here:5c1f7b296a/clang/lib/Frontend/CompilerInstance.cpp (L789)
Reviewed By: mstorsjo Differential Revision: https://reviews.llvm.org/D118212
This commit is contained in:
parent
b2f5004259
commit
659bf6d08c
|
@ -1254,7 +1254,8 @@ Error TempFile::keep(const Twine &Name) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// If we can't cancel the delete don't rename.
|
// If we can't cancel the delete don't rename.
|
||||||
auto H = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
|
auto H = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
|
||||||
std::error_code RenameEC = setDeleteDisposition(H, false);
|
std::error_code RenameEC =
|
||||||
|
RemoveOnClose ? std::error_code() : setDeleteDisposition(H, false);
|
||||||
bool ShouldDelete = false;
|
bool ShouldDelete = false;
|
||||||
if (!RenameEC) {
|
if (!RenameEC) {
|
||||||
RenameEC = rename_handle(H, Name);
|
RenameEC = rename_handle(H, Name);
|
||||||
|
|
Loading…
Reference in New Issue