[llvm-commits] CVS: llvm/lib/System/Unix/Alarm.inc
Reid Spencer
reid at x10sys.com
Wed Dec 21 19:24:00 PST 2005
Changes in directory llvm/lib/System/Unix:
Alarm.inc added (r1.1)
---
Log message:
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.
---
Diffs of the changes: (+68 -0)
Alarm.inc | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 68 insertions(+)
Index: llvm/lib/System/Unix/Alarm.inc
diff -c /dev/null llvm/lib/System/Unix/Alarm.inc:1.1
*** /dev/null Wed Dec 21 21:23:56 2005
--- llvm/lib/System/Unix/Alarm.inc Wed Dec 21 21:23:46 2005
***************
*** 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;
+ }
More information about the llvm-commits
mailing list