Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Decided I don't like "set -x".
[rsync/rsync.git]
/
socket.c
diff --git
a/socket.c
b/socket.c
index
adab8e3
..
7e77969
100644
(file)
--- a/
socket.c
+++ b/
socket.c
@@
-36,6
+36,10
@@
extern char *bind_address;
extern int default_af_hint;
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,
/**
* 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
#ifdef WNOHANG
while (waitpid(-1, NULL, WNOHANG) > 0) {}
#endif
+#if !defined HAVE_SIGACTION && !defined HAVE_SIGPROCMASK
signal(SIGCHLD, sigchld_handler);
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;
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)
/* 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];
}
maxfd = sp[i];
}
-
/* now accept incoming connections - forking a new process
* for each incoming connection */
while (1) {
/* 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 */
/* close log file before the potentially very long select so
* file can be trimmed by another process instead of growing
* forever */
- log_close();
+ log
file
_close();
#ifdef FD_COPY
FD_COPY(&deffds, &fds);
#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;
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
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 log
file
_close() above). */
+ log
file_re
open();
ret = fn(fd, fd);
close_all();
_exit(ret);
ret = fn(fd, fd);
close_all();
_exit(ret);