Debian bug #128632 && fork

Martin Pool mbp at samba.org
Tue Feb 19 09:26:58 EST 2002


Why the sleep() call?

On 16 Feb 2002, Colin Walters <walters at debian.org> wrote:
> Index: socket.c
> ===================================================================
> RCS file: /cvsroot/rsync/socket.c,v
> retrieving revision 1.74
> diff -u -u -r1.74 socket.c
> +++ socket.c	16 Feb 2002 23:08:47 -0000
> @@ -387,6 +387,7 @@
>  	   for each incoming connection */
>  	while (1) {
>  		fd_set fds;
> +		pid_t pid;
>  		int fd;
>  		struct sockaddr_storage addr;
>  		socklen_t addrlen = sizeof addr;
> @@ -418,12 +419,17 @@
>                  while (waitpid(-1, NULL, WNOHANG) > 0);
>  #endif
>  
> -		if (fork()==0) {
> +		if ((pid = fork()) == 0) {
>  			close(s);
>  			/* open log file in child before possibly giving
>  			   up privileges  */
>  			log_open();
>  			_exit(fn(fd));
> +		} else if (pid < 0) {
> +			rprintf(FERROR, "could not create child process: %s\n",
> +				strerror(errno));
> +			close(fd);
> +			sleep(2);
>  		}
>  
>  		close(fd);

-- 
Martin 




More information about the rsync mailing list