28 #include <utils/system/signal.h> 62 SignalManager * SignalManager::__instance = NULL;
63 SignalHandler * SignalManager::__signal_handlers[NSIG];
66 SignalManager::SignalManager()
72 SignalManager::SignalManager(
const SignalManager &cc)
83 if ( __instance == NULL ) {
85 for (
unsigned int i = 0; i < NSIG; ++i) {
86 __signal_handlers[i] = NULL;
100 if ( __instance != NULL ) {
101 for (
unsigned int i = 0; i < NSIG; ++i) {
120 __signal_handlers[signum] = handler;
124 sa.sa_handler = SignalManager::dispatcher;
125 sigemptyset (&sa.sa_mask);
127 sigaction (signum, &sa, 0);
142 restore_default(signum);
154 for (
unsigned int i = 0; i < NSIG; ++i) {
155 if ( __signal_handlers[i] == handler ) {
163 SignalManager::restore_default(
int signum)
166 __signal_handlers[signum] = NULL;
170 sa.sa_handler = SIG_DFL;
171 sigemptyset (&sa.sa_mask);
173 sigaction (signum, &sa, 0);
185 __signal_handlers[signum] = NULL;
189 sa.sa_handler = SIG_IGN;
190 sigemptyset (&sa.sa_mask);
192 sigaction (signum, &sa, 0);
201 SignalManager::dispatcher(
int signum)
203 if (__signal_handlers[signum] != NULL) {
static void finalize()
Finalize (and free) the SignalManager instance, this does NOT implicitly delete the signal handlers...
virtual void handle_signal(int signal)=0
Signal hanlding method.
Fawkes library namespace.
Interface for signal handling.
static SignalManager * instance()
Get the SignalManager instance.
static void ignore(int signum)
Ignore a signal.
static SignalHandler * register_handler(int signum, SignalHandler *handler)
Register a SignalHandler for a signal.
static void unregister_handler(int signum)
Unregister a SignalHandler for a signal.