Skip to content

Commit 9cf3880

Browse files
committed
Cleanup: Signal handler: Use only allowed functions
Core dump did not work any way
1 parent 6c1aa3d commit 9cf3880

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

src/rtapi/uspace_rtapi_main.cc

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -635,29 +635,34 @@ struct rtapi_module {
635635
#define MAX_MODULES 64
636636
#define MODULE_OFFSET 32768
637637

638+
#define WRITE_STDERR_STR(str) ((void)!write(STDERR_FILENO, str, strlen(str)))
638639
static void signal_handler(int sig, siginfo_t * /*si*/, void * /*uctx*/) {
640+
//Read: https://www.man7.org/linux/man-pages/man7/signal-safety.7.html
639641
switch (sig) {
640642
case SIGXCPU:
641-
// should not happen - must be handled in RTAPI if enabled
642-
rtapi_print_msg(RTAPI_MSG_ERR, "rtapi_app: BUG: SIGXCPU received - exiting\n");
643-
_exit(0);
643+
WRITE_STDERR_STR("rtapi_app: SIGXCPU - shutting down\n");
644+
break;
645+
case SIGSEGV:
646+
WRITE_STDERR_STR("rtapi_app: SIGSEGV - shutting down\n");
647+
break;
648+
case SIGILL:
649+
WRITE_STDERR_STR("rtapi_app: SIGILL - shutting down\n");
650+
break;
651+
case SIGFPE:
652+
WRITE_STDERR_STR("rtapi_app: SIGFPE - shutting down\n");
644653
break;
645-
646654
case SIGTERM:
647-
rtapi_print_msg(RTAPI_MSG_ERR, "rtapi_app: SIGTERM - shutting down\n");
648-
_exit(0);
655+
WRITE_STDERR_STR("rtapi_app: SIGTERM - shutting down\n");
649656
break;
650-
651-
default: // pretty bad
652-
rtapi_print_msg(RTAPI_MSG_ERR, "rtapi_app: caught signal %d - dumping core\n", sig);
653-
sleep(1); // let syslog drain
654-
signal(sig, SIG_DFL);
655-
// for reasons unknown raise(sig); doesn't lead to core dump file
656-
// but this will
657-
kill(getpid(), sig);
657+
case SIGINT:
658+
WRITE_STDERR_STR("rtapi_app: SIGINT - shutting down\n");
659+
break;
660+
default:
661+
WRITE_STDERR_STR("rtapi_app: UNKNOWN - shutting down\n");
658662
break;
659663
}
660-
_exit(1);
664+
665+
_exit(-1);
661666
}
662667

663668
const static size_t PRE_ALLOC_SIZE = 1024 * 1024 * 32;
@@ -766,6 +771,7 @@ static int harden_rt() {
766771
sig_act.sa_sigaction = signal_handler;
767772
sig_act.sa_flags = SA_SIGINFO;
768773

774+
sigaction(SIGXCPU, &sig_act, (struct sigaction *)NULL);
769775
sigaction(SIGSEGV, &sig_act, (struct sigaction *)NULL);
770776
sigaction(SIGILL, &sig_act, (struct sigaction *)NULL);
771777
sigaction(SIGFPE, &sig_act, (struct sigaction *)NULL);

0 commit comments

Comments
 (0)