~ubuntu-branches/ubuntu/maverick/clamav/maverick-backports

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/lib/System/Unix/Alarm.inc

  • Committer: Bazaar Package Importer
  • Author(s): Stephen Gran, Stephen Gran, Michael Tautschnig
  • Date: 2010-04-26 21:41:18 UTC
  • mfrom: (2.1.6 squeeze)
  • Revision ID: james.westby@ubuntu.com-20100426214118-i6lo606wnh7ywfj6
Tags: 0.96+dfsg-4
[ Stephen Gran ]
* Fixed typo in clamav-milter's postinst

[ Michael Tautschnig ]
* Fixed typo in clamav-freshclam's postinst (closes: #579271)
* Debconf translation updates
  - Portuguese (closes: #579068)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//===-- Alarm.inc - Implement Unix Alarm Support ----------------*- C++ -*-===//
 
2
//
 
3
//                     The LLVM Compiler Infrastructure
 
4
//
 
5
// This file is distributed under the University of Illinois Open Source
 
6
// License. See LICENSE.TXT for details.
 
7
//
 
8
//===----------------------------------------------------------------------===//
 
9
//
 
10
// This file implements the UNIX Alarm support.
 
11
//
 
12
//===----------------------------------------------------------------------===//
 
13
 
 
14
#include <signal.h>
 
15
#include <unistd.h>
 
16
#include <cassert>
 
17
using namespace llvm;
 
18
 
 
19
/// AlarmCancelled - This flag is set by the SIGINT signal handler if the
 
20
/// user presses CTRL-C.
 
21
static volatile bool AlarmCancelled = false;
 
22
 
 
23
/// AlarmTriggered - This flag is set by the SIGALRM signal handler if the
 
24
/// alarm was triggered.
 
25
static volatile bool AlarmTriggered = false;
 
26
 
 
27
/// NestedSOI - Sanity check.  Alarms cannot be nested or run in parallel.
 
28
/// This ensures that they never do.
 
29
static bool NestedSOI = false;
 
30
 
 
31
static RETSIGTYPE SigIntHandler(int Sig) {
 
32
  AlarmCancelled = true;
 
33
  signal(SIGINT, SigIntHandler);
 
34
}
 
35
 
 
36
static RETSIGTYPE SigAlarmHandler(int Sig) {
 
37
  AlarmTriggered = true;
 
38
}
 
39
 
 
40
static void (*OldSigIntHandler) (int);
 
41
 
 
42
void sys::SetupAlarm(unsigned seconds) {
 
43
  assert(!NestedSOI && "sys::SetupAlarm calls cannot be nested!");
 
44
  NestedSOI = true;
 
45
  AlarmCancelled = false;
 
46
  AlarmTriggered = false;
 
47
  ::signal(SIGALRM, SigAlarmHandler);
 
48
  OldSigIntHandler = ::signal(SIGINT, SigIntHandler);
 
49
  ::alarm(seconds);
 
50
}
 
51
 
 
52
void sys::TerminateAlarm() {
 
53
  assert(NestedSOI && "sys::TerminateAlarm called without sys::SetupAlarm!");
 
54
  ::alarm(0);
 
55
  ::signal(SIGALRM, SIG_DFL);
 
56
  ::signal(SIGINT, OldSigIntHandler);
 
57
  AlarmCancelled = false;
 
58
  AlarmTriggered = false;
 
59
  NestedSOI = false;
 
60
}
 
61
 
 
62
int sys::AlarmStatus() {
 
63
  if (AlarmCancelled)
 
64
    return -1;
 
65
  if (AlarmTriggered)
 
66
    return 1;
 
67
  return 0;
 
68
}
 
69
 
 
70
void sys::Sleep(unsigned n) {
 
71
  ::sleep(n);
 
72
}