Implement sys::SetInterruptFunction on Unix, stub it on win32 so that the

build will not fail


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22578 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-08-02 02:14:22 +00:00
parent e62321ac41
commit fa8c292ebd
2 changed files with 22 additions and 2 deletions

View File

@ -24,6 +24,9 @@
namespace { namespace {
/// InterruptFunction - The function to call if ctrl-c is pressed.
void (*InterruptFunction)() = 0;
std::vector<std::string> *FilesToRemove = 0 ; std::vector<std::string> *FilesToRemove = 0 ;
std::vector<llvm::sys::Path> *DirectoriesToRemove = 0; std::vector<llvm::sys::Path> *DirectoriesToRemove = 0;
@ -116,8 +119,16 @@ RETSIGTYPE SignalHandler(int Sig) {
DirectoriesToRemove->pop_back(); DirectoriesToRemove->pop_back();
} }
if (std::find(IntSigs, IntSigsEnd, Sig) != IntSigsEnd) if (std::find(IntSigs, IntSigsEnd, Sig) != IntSigsEnd) {
exit(1); // If this is an interrupt signal, exit the program if (InterruptFunction) {
void (*IF)() = InterruptFunction;
InterruptFunction = 0;
IF(); // run the interrupt function.
return;
} else {
exit(1); // If this is an interrupt signal, exit the program
}
}
// Otherwise if it is a fault (like SEGV) output the stacktrace to // Otherwise if it is a fault (like SEGV) output the stacktrace to
// STDERR (if we can) and reissue the signal to die... // STDERR (if we can) and reissue the signal to die...
@ -134,6 +145,11 @@ void RegisterHandler(int Signal) {
namespace llvm { namespace llvm {
void sys::SetInterruptFunction(void (*IF)()) {
InterruptFunction = IF;
RegisterHandler(SIGINT);
}
// RemoveFileOnSignal - The public API // RemoveFileOnSignal - The public API
void sys::RemoveFileOnSignal(const sys::Path &Filename) { void sys::RemoveFileOnSignal(const sys::Path &Filename) {
if (FilesToRemove == 0) if (FilesToRemove == 0)

View File

@ -109,6 +109,10 @@ void sys::PrintStackTraceOnErrorSignal() {
LeaveCriticalSection(&CriticalSection); LeaveCriticalSection(&CriticalSection);
} }
void sys::SetInterruptFunction(void (*IF)()) {
// Currently unimplemented.
}
} }
static void Cleanup() { static void Cleanup() {