[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