From 2b28968dfb36792ccdbe3b7b9be800b97d3f13f6 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Thu, 2 Feb 2006 02:39:25 +0000 Subject: [PATCH] Call SIGACTION() instead of signal(). --- cleanup.c | 8 ++++++-- socket.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/cleanup.c b/cleanup.c index 0163dd25..08609e16 100644 --- a/cleanup.c +++ b/cleanup.c @@ -26,6 +26,10 @@ extern int keep_partial; extern int log_got_error; extern char *partial_dir; +#if defined HAVE_SIGACTION && defined HAVE_SIGPROCMASK +static struct sigaction sigact; +#endif + /** * Close all open sockets and files, allowing a (somewhat) graceful * shutdown() of socket connections. This eliminates the abortive @@ -94,8 +98,8 @@ void _exit_cleanup(int code, const char *file, int line) } inside_cleanup++; - signal(SIGUSR1, SIG_IGN); - signal(SIGUSR2, SIG_IGN); + SIGACTION(SIGUSR1, SIG_IGN); + SIGACTION(SIGUSR2, SIG_IGN); if (verbose > 3) { rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): entered\n", diff --git a/socket.c b/socket.c index bc61baeb..7e779695 100644 --- a/socket.c +++ b/socket.c @@ -36,6 +36,10 @@ extern char *bind_address; extern int default_af_hint; +#if defined HAVE_SIGACTION && defined HAVE_SIGPROCMASK +static struct sigaction sigact; +#endif + /** * Establish a proxy connection on an open socket to a web proxy by * using the CONNECT method. If proxy_user and proxy_pass are not NULL, @@ -433,7 +437,9 @@ static RETSIGTYPE sigchld_handler(UNUSED(int val)) #ifdef WNOHANG while (waitpid(-1, NULL, WNOHANG) > 0) {} #endif +#if !defined HAVE_SIGACTION && !defined HAVE_SIGPROCMASK signal(SIGCHLD, sigchld_handler); +#endif } @@ -442,6 +448,10 @@ void start_accept_loop(int port, int (*fn)(int, int)) fd_set deffds; int *sp, maxfd, i; +#if defined HAVE_SIGACTION && defined HAVE_SIGPROCMASK + sigact.sa_flags = SA_NOCLDSTOP; +#endif + /* open an incoming socket */ sp = open_socket_in(SOCK_STREAM, port, bind_address, default_af_hint); if (sp == NULL) @@ -499,7 +509,7 @@ void start_accept_loop(int port, int (*fn)(int, int)) if (fd < 0) continue; - signal(SIGCHLD, sigchld_handler); + SIGACTION(SIGCHLD, sigchld_handler); if ((pid = fork()) == 0) { int ret; -- 2.34.1