Implement a generic polled Alarm function. This merely removes the system

dependent portion of the lib/Support/SlowOperationTimer code into the
lib/System implementation where it can be ported to different platforms.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24937 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer
2005-12-22 03:23:46 +00:00
parent 3a217f3e53
commit b13cf98e6b
4 changed files with 180 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
//===- Alarm.cpp - Alarm Generation Support ---------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the Reid Spencer and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the Alarm functionality
//
//===----------------------------------------------------------------------===//
#include "llvm/System/Alarm.h"
#include "llvm/Config/config.h"
namespace llvm {
using namespace sys;
//===----------------------------------------------------------------------===//
//=== WARNING: Implementation here must contain only TRULY operating system
//=== independent code.
//===----------------------------------------------------------------------===//
}
// Include the platform-specific parts of this class.
#ifdef LLVM_ON_UNIX
#include "Unix/Alarm.inc"
#endif
#ifdef LLVM_ON_WIN32
#include "Win32/Alarm.inc"
#endif
+68
View File
@@ -0,0 +1,68 @@
//===-- Alarm.inc - Implement Unix Alarm Support --------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the Reid Spencer and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the UNIX Alarm support.
//
//===----------------------------------------------------------------------===//
#include <signal.h>
#include <unistd.h>
#include <cassert>
using namespace llvm;
/// AlarmCancelled - This flag is set by the SIGINT signal handler if the
/// user presses CTRL-C.
static volatile bool AlarmCancelled = false;
/// AlarmTriggered - This flag is set by the SIGALRM signal handler if the
/// alarm was triggered.
static volatile bool AlarmTriggered = false;
/// NestedSOI - Sanity check. Alarms cannot be nested or run in parallel.
/// This ensures that they never do.
static bool NestedSOI = false;
static RETSIGTYPE SigIntHandler(int Sig) {
AlarmCancelled = true;
signal(SIGINT, SigIntHandler);
}
static RETSIGTYPE SigAlarmHandler(int Sig) {
AlarmTriggered = true;
}
static void (*OldSigIntHandler) (int);
void sys::SetupAlarm(unsigned seconds) {
assert(!NestedSOI && "sys::SetupAlarm calls cannot be nested!");
NestedSOI = true;
AlarmCancelled = false;
AlarmTriggered = false;
::signal(SIGALRM, SigAlarmHandler);
OldSigIntHandler = ::signal(SIGINT, SigIntHandler);
::alarm(seconds);
}
void sys::TerminateAlarm() {
assert(NestedSOI && "sys::TerminateAlarm called without sys::SetupAlarm!");
::alarm(0);
::signal(SIGALRM, SIG_DFL);
::signal(SIGINT, OldSigIntHandler);
AlarmCancelled = false;
AlarmTriggered = false;
NestedSOI = false;
}
int sys::AlarmStatus() {
if (AlarmCancelled)
return -1;
if (AlarmTriggered)
return 1;
return 0;
}
+36
View File
@@ -0,0 +1,36 @@
//===-- Alarm.inc - Implement Win32 Alarm Support -------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by the Reid Spencer and is distributed under the
// University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements the Win32 Alarm support.
//
//===----------------------------------------------------------------------===//
#include <cassert>
using namespace llvm;
/// NestedSOI - Sanity check. Alarms cannot be nested or run in parallel.
/// This ensures that they never do.
static bool NestedSOI = false;
void sys::SetupAlarm(unsigned seconds) {
assert(!NestedSOI && "sys::SetupAlarm calls cannot be nested!");
NestedSOI = true;
// FIXME: Implement for Win32
}
void sys::TerminateAlarm() {
assert(NestedSOI && "sys::TerminateAlarm called without sys::SetupAlarm!");
// FIXME: Implement for Win32
NestedSOI = false;
}
int sys::AlarmStatus() {
// FIXME: Implement for Win32
return 0;
}