PIPS
signal.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include "genC.h"
#include "linear.h"
#include "ri.h"
#include "misc.h"
#include "pipsdbm.h"
#include "pipsmake.h"
#include "top-level.h"
+ Include dependency graph for signal.c:

Go to the source code of this file.

Functions

static void pips_timeout_callback (const int delay, _UNUSED_ const char *function, const char *file, const int lineno)
 
void reset_pips_timeout (void)
 signal.c More...
 
void set_pips_timeout (unsigned int delay)
 set pips timeout on delay setting to 0 removes the current timeout. More...
 
void set_pips_timeout_from_env (void)
 set pips timeout using PIPS_TIMEOUT environment variable More...
 
static void pips_signal_handler (int num)
 
void initialize_signal_catcher (void)
 

Variables

static bool pips_timeout_set = false
 

Function Documentation

◆ initialize_signal_catcher()

void initialize_signal_catcher ( void  )

Definition at line 126 of file signal.c.

127 {
128  // misc signals
129  (void) signal(SIGINT, pips_signal_handler);
130  (void) signal(SIGHUP, pips_signal_handler);
131  (void) signal(SIGTERM, pips_signal_handler);
132 
133  (void) signal(SIGUSR1, pips_signal_handler);
134  (void) signal(SIGUSR2, pips_signal_handler);
135 
136  // timeout handling
138 }
void set_pips_timeout_from_env(void)
set pips timeout using PIPS_TIMEOUT environment variable
Definition: signal.c:84
static void pips_signal_handler(int num)
Definition: signal.c:94

References pips_signal_handler(), and set_pips_timeout_from_env().

Referenced by pips_main(), and tpips_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pips_signal_handler()

static void pips_signal_handler ( int  num)
static

Definition at line 94 of file signal.c.

95 {
96  user_log("interruption signal %d caught!\n", num);
97 
98  switch (num)
99  {
100  case SIGINT:
101  case SIGHUP:
102  case SIGTERM:
103  // BUG: if nothing is in progress (eg tpips prompt), should exit
104  user_log("interrupting pipsmake as soon as possible...\n");
106  break;
107  case SIGUSR1:
108  user_log("interruption for checkpointing...\n");
109  // cold blooded: might be quite dangerous for the life of the process.
110  // should not enter twice in there... might be convenient anyway.
112  break;
113  case SIGUSR2:
114  user_log("interruption for exiting...\n");
115  exit(128 + SIGUSR2);
116  break;
117  default:
118  fprintf(stderr, "[pips_signal_handler] unexpected signal %d\n", num);
119  abort();
120  }
121 
122  // must reset handler once raised.
123  (void) signal(num, pips_signal_handler);
124 }
void user_log(const char *format,...)
Definition: message.c:234
static int num
Definition: bourdoncle.c:137
#define exit(code)
Definition: misc-local.h:54
#define abort()
Definition: misc-local.h:53
void checkpoint_workspace(void)
checkpoint the current workspace, i.e.
Definition: openclose.c:129
void interrupt_pipsmake_asap()
misc.c
Definition: misc.c:48
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...

References abort, checkpoint_workspace(), exit, fprintf(), interrupt_pipsmake_asap(), num, and user_log().

Referenced by initialize_signal_catcher().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ pips_timeout_callback()

static void pips_timeout_callback ( const int  delay,
_UNUSED_ const char *  function,
const char *  file,
const int  lineno 
)
static

Definition at line 47 of file signal.c.

52 {
53  // nothing fancy can be done on this interrupt...
54  pips_log_stop(__func__, file, lineno, user_error_log,
55  TIMEOUT_CODE, "timeout after %d seconds", delay);
56 }
void pips_log_stop(const char *function, const char *file, const int lineno, const pips_log_t tag, const int code, const string format,...)
quick log and stop, called on timeout this must not invoke malloc as it may still held locks if inter...
Definition: message.c:1323
#define TIMEOUT_CODE
Definition: misc-local.h:43
@ user_error_log
Definition: misc-local.h:37

References pips_log_stop(), TIMEOUT_CODE, and user_error_log.

Referenced by set_pips_timeout(), and set_pips_timeout_from_env().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reset_pips_timeout()

void reset_pips_timeout ( void  )

signal.c

Definition at line 60 of file signal.c.

61 {
62  if (pips_timeout_set)
63  POP_TIMEOUT();
64  pips_timeout_set = false;
65 }
#define POP_TIMEOUT()
static bool pips_timeout_set
Definition: signal.c:58

References pips_timeout_set, and POP_TIMEOUT.

Referenced by set_pips_timeout(), and set_pips_timeout_from_env().

+ Here is the caller graph for this function:

◆ set_pips_timeout()

void set_pips_timeout ( unsigned int  delay)

set pips timeout on delay setting to 0 removes the current timeout.

Parameters
delayelay

Definition at line 70 of file signal.c.

71 {
74 
75  if (delay > 0)
76  {
77  pips_timeout_set = true;
78  PUSH_TIMEOUT(delay);
79  }
80 }
#define PUSH_TIMEOUT(delay)
void set_timeout_callback(timeout_callback_f)
Definition: errors.c:485
static void pips_timeout_callback(const int delay, _UNUSED_ const char *function, const char *file, const int lineno)
Definition: signal.c:47
void reset_pips_timeout(void)
signal.c
Definition: signal.c:60

References pips_timeout_callback(), pips_timeout_set, PUSH_TIMEOUT, reset_pips_timeout(), and set_timeout_callback().

+ Here is the call graph for this function:

◆ set_pips_timeout_from_env()

void set_pips_timeout_from_env ( void  )

set pips timeout using PIPS_TIMEOUT environment variable

Definition at line 84 of file signal.c.

85 {
88 
89  pips_timeout_set = PUSH_TIMEOUT_ENV("PIPS_TIMEOUT");
90 }
#define PUSH_TIMEOUT_ENV(env)

References pips_timeout_callback(), pips_timeout_set, PUSH_TIMEOUT_ENV, reset_pips_timeout(), and set_timeout_callback().

Referenced by initialize_signal_catcher().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ pips_timeout_set

bool pips_timeout_set = false
static

Definition at line 58 of file signal.c.

Referenced by reset_pips_timeout(), set_pips_timeout(), and set_pips_timeout_from_env().