Renamed sum_table -> hash_table.
[rsync/rsync.git] / socket.c
index adab8e3..47f7ce1 100644 (file)
--- a/socket.c
+++ b/socket.c
 extern char *bind_address;
 extern int default_af_hint;
 
+#ifdef HAVE_SIGACTION
+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
+#ifndef HAVE_SIGACTION
        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;
 
+#ifdef HAVE_SIGACTION
+       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)
@@ -465,7 +475,6 @@ void start_accept_loop(int port, int (*fn)(int, int))
                        maxfd = sp[i];
        }
 
-
        /* now accept incoming connections - forking a new process
         * for each incoming connection */
        while (1) {
@@ -478,7 +487,7 @@ void start_accept_loop(int port, int (*fn)(int, int))
                /* close log file before the potentially very long select so
                 * file can be trimmed by another process instead of growing
                 * forever */
-               log_close();
+               logfile_close();
 
 #ifdef FD_COPY
                FD_COPY(&deffds, &fds);
@@ -500,15 +509,15 @@ 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;
                        for (i = 0; sp[i] >= 0; i++)
                                close(sp[i]);
                        /* Re-open log file in child before possibly giving
-                        * up privileges (see log_close() above). */
-                       log_open();
+                        * up privileges (see logfile_close() above). */
+                       logfile_reopen();
                        ret = fn(fd, fd);
                        close_all();
                        _exit(ret);