use sigaction(2) instead of signal(2)

To prevent crashes
This commit is contained in:
Raphael Robatsch 2022-12-03 19:12:30 +01:00
parent e7214b60fa
commit 221daf2f5d

View file

@ -95,15 +95,18 @@ void getsigcmds(unsigned int signal)
void setupsignals() void setupsignals()
{ {
struct sigaction sa = {0};
#ifndef __OpenBSD__ #ifndef __OpenBSD__
/* initialize all real time signals with dummy handler */ /* initialize all real time signals with dummy handler */
for (int i = SIGRTMIN; i <= SIGRTMAX; i++) sa.sa_handler = dummysighandler;
signal(i, dummysighandler); for (int i = SIGRTMIN; i <= SIGRTMAX; i++)
sigaction(i, &sa, NULL);
#endif #endif
sa.sa_handler = sighandler;
for (unsigned int i = 0; i < LENGTH(blocks); i++) { for (unsigned int i = 0; i < LENGTH(blocks); i++) {
if (blocks[i].signal > 0) if (blocks[i].signal > 0)
signal(SIGMINUS+blocks[i].signal, sighandler); sigaction(SIGMINUS+blocks[i].signal, &sa, NULL);
} }
} }