: set(false),
sig_int(NULL),
sig_hup(NULL),
- sig_term(NULL)
+ sig_term(NULL),
+ sig_segv(NULL),
+ handler(NULL)
{}
bool set;
void (*sig_int)(int);
void (*sig_hup)(int);
void (*sig_term)(int);
+ void (*sig_segv)(int);
void (*handler)(int);
};
interrupts.handler(sig);
}
if (sig == SIGINT) {
- if (!interrupts.sig_int)
+ if (!interrupts.sig_int) {
exit(sig);
+ }
interrupts.sig_int(sig);
} else if (sig == SIGHUP) {
- if (!interrupts.sig_hup)
+ if (!interrupts.sig_hup) {
exit(sig);
+ }
interrupts.sig_hup(sig);
} else if (sig == SIGTERM) {
- if (!interrupts.sig_term)
+ if (!interrupts.sig_term) {
exit(sig);
+ }
interrupts.sig_term(sig);
+ } else if (sig == SIGSEGV) {
+ if (interrupts.sig_segv) {
+ interrupts.sig_segv(sig);
+ }
}
}
SET_IF_NOT_IGNORED(SIGINT, interrupts.sig_int);
SET_IF_NOT_IGNORED(SIGHUP, interrupts.sig_hup);
SET_IF_NOT_IGNORED(SIGTERM, interrupts.sig_term);
+ SET_IF_NOT_IGNORED(SIGSEGV, interrupts.sig_segv);
interrupts.set = true;
#undef SET_IF_NOT_IGNORED