28 #include <utils/system/signal.h>
63 SignalManager *SignalManager::instance_ = NULL;
64 SignalHandler *SignalManager::signal_handlers_[NSIG];
67 SignalManager::SignalManager()
72 SignalManager::SignalManager(
const SignalManager &cc)
82 if (instance_ == NULL) {
83 instance_ =
new SignalManager();
84 for (
unsigned int i = 0; i < NSIG; ++i) {
85 signal_handlers_[i] = NULL;
98 if (instance_ != NULL) {
99 for (
unsigned int i = 0; i < NSIG; ++i) {
117 signal_handlers_[signum] = handler;
121 sa.sa_handler = SignalManager::dispatcher;
122 sigemptyset(&sa.sa_mask);
124 sigaction(signum, &sa, 0);
138 restore_default(signum);
148 for (
unsigned int i = 0; i < NSIG; ++i) {
149 if (signal_handlers_[i] == handler) {
156 SignalManager::restore_default(
int signum)
159 signal_handlers_[signum] = NULL;
163 sa.sa_handler = SIG_DFL;
164 sigemptyset(&sa.sa_mask);
166 sigaction(signum, &sa, 0);
177 signal_handlers_[signum] = NULL;
181 sa.sa_handler = SIG_IGN;
182 sigemptyset(&sa.sa_mask);
184 sigaction(signum, &sa, 0);
192 SignalManager::dispatcher(
int signum)
194 if (signal_handlers_[signum] != NULL) {