From signal(2)
The behavior of signal() varies across UNIX versions, and has also var‐
ied historically across different versions of Linux. Avoid its use:
use sigaction(2) instead. See Portability below.
Replaced signal() with sigaction() in daemon.c child_handler()
Signed-off-by: Jeremiah Mahler <redacted>
---
daemon.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/daemon.c b/daemon.c
index 78c4a1c..3c48dc0 100644
--- a/daemon.c
+++ b/daemon.c
@@ -791,12 +791,15 @@ static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
static void child_handler(int signo)
{
+ struct sigaction sa;
/*
* Otherwise empty handler because systemcalls will get interrupted
* upon signal receipt
* SysV needs the handler to be rearmed
*/
- signal(SIGCHLD, child_handler);
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = child_handler;
+ sigaction(SIGCHLD, &sa, 0);
}
static int set_reuse_addr(int sockfd)--
2.0.0.rc4.6.g127602c