Add an interface for unregistering a file from the FilesToRemove list.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112705 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-09-01 14:17:34 +00:00
parent 2ad12a0e2a
commit 41154114f6
3 changed files with 28 additions and 0 deletions

View File

@ -29,6 +29,10 @@ namespace sys {
/// @brief Remove a file if a fatal signal occurs.
bool RemoveFileOnSignal(const Path &Filename, std::string* ErrMsg = 0);
/// This function removes a file from the list of files to be removed on
/// signal delivery.
void DontRemoveFileOnSignal(const Path &Filename);
/// When an error signal (such as SIBABRT or SIGSEGV) is delivered to the
/// process, print a stack trace and then exit.
/// @brief Print a stack trace if a fatal signal occurs.

View File

@ -182,6 +182,16 @@ bool llvm::sys::RemoveFileOnSignal(const sys::Path &Filename,
return false;
}
// DontRemoveFileOnSignal - The public API
void llvm::sys::DontRemoveFileOnSignal(const sys::Path &Filename) {
SignalsMutex.acquire();
std::vector<sys::Path>::reverse_iterator I =
std::find(FilesToRemove.rbegin(), FilesToRemove.rend(), Filename);
if (I != FilesToRemove.rend())
FilesToRemove.erase(I.base()-1);
SignalsMutex.release();
}
/// AddSignalHandler - Add a function to be called when a signal is delivered
/// to the process. The handler can have a cookie passed to it to identify
/// what instance of the handler it is.

View File

@ -140,6 +140,20 @@ bool sys::RemoveFileOnSignal(const sys::Path &Filename, std::string* ErrMsg) {
return false;
}
// DontRemoveFileOnSignal - The public API
void sys::DontRemoveFileOnSignal(const sys::Path &Filename) {
if (FilesToRemove == NULL)
return;
FilesToRemove->push_back(Filename);
std::vector<sys::Path>::reverse_iterator I =
std::find(FilesToRemove->rbegin(), FilesToRemove->rend(), Filename);
if (I != FilesToRemove->rend())
FilesToRemove->erase(I.base()-1);
LeaveCriticalSection(&CriticalSection);
}
/// PrintStackTraceOnErrorSignal - When an error signal (such as SIBABRT or
/// SIGSEGV) is delivered to the process, print a stack trace and then exit.
void sys::PrintStackTraceOnErrorSignal() {