Skip to content

Commit a39eba7

Browse files
committed
[Support] [Windows] Use RemoveFileOnSignal if unable to use the delete-on-close flag
This takes care of cleaning up the temp files on crashes. It doesn't handle cleanup when explicitly killed though. Differential Revision: https://reviews.llvm.org/D112710
1 parent 7ff943a commit a39eba7

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

llvm/lib/Support/Path.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,9 +1212,7 @@ Error TempFile::discard() {
12121212
std::error_code RemoveEC;
12131213
if (Remove && !TmpName.empty()) {
12141214
RemoveEC = fs::remove(TmpName);
1215-
#ifndef _WIN32
12161215
sys::DontRemoveFileOnSignal(TmpName);
1217-
#endif
12181216
if (!RemoveEC)
12191217
TmpName = "";
12201218
} else {
@@ -1260,8 +1258,8 @@ Error TempFile::keep(const Twine &Name) {
12601258
if (RenameEC)
12611259
remove(TmpName);
12621260
}
1263-
sys::DontRemoveFileOnSignal(TmpName);
12641261
#endif
1262+
sys::DontRemoveFileOnSignal(TmpName);
12651263

12661264
if (!RenameEC)
12671265
TmpName = "";
@@ -1283,9 +1281,8 @@ Error TempFile::keep() {
12831281
auto H = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
12841282
if (std::error_code EC = setDeleteDisposition(H, false))
12851283
return errorCodeToError(EC);
1286-
#else
1287-
sys::DontRemoveFileOnSignal(TmpName);
12881284
#endif
1285+
sys::DontRemoveFileOnSignal(TmpName);
12891286

12901287
TmpName = "";
12911288

@@ -1309,17 +1306,20 @@ Expected<TempFile> TempFile::create(const Twine &Model, unsigned Mode,
13091306
TempFile Ret(ResultPath, FD);
13101307
#ifdef _WIN32
13111308
auto H = reinterpret_cast<HANDLE>(_get_osfhandle(FD));
1309+
bool SetSignalHandler = false;
13121310
if (std::error_code EC = setDeleteDisposition(H, true)) {
13131311
Ret.RemoveOnClose = true;
1312+
SetSignalHandler = true;
13141313
}
13151314
#else
1316-
if (sys::RemoveFileOnSignal(ResultPath)) {
1315+
bool SetSignalHandler = true;
1316+
#endif
1317+
if (SetSignalHandler && sys::RemoveFileOnSignal(ResultPath)) {
13171318
// Make sure we delete the file when RemoveFileOnSignal fails.
13181319
consumeError(Ret.discard());
13191320
std::error_code EC(errc::operation_not_permitted);
13201321
return errorCodeToError(EC);
13211322
}
1322-
#endif
13231323
return std::move(Ret);
13241324
}
13251325
} // namespace fs

0 commit comments

Comments
 (0)