Christian Weisgerber([email protected]) on 2019.06.03 14:39:14 -0000:
> On 2019-06-02, Hiltjo Posthuma <[email protected]> wrote:
>
> > I noticed when using openrsync with a remote and a ssh_prog set (-e option)
> > the
> > socket is closed twice also.
>
> Yes, we need to decide whether rsync_socket() should close the
> socket itself or not. Since rsync_socket() doesn't open the socket,
> I guess it shouldn't close it either. Matches rsync_client().
>
> ok?
ok
>
> Index: main.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/rsync/main.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 main.c
> --- main.c 28 May 2019 18:20:30 -0000 1.46
> +++ main.c 3 Jun 2019 14:30:06 -0000
> @@ -428,8 +428,10 @@ main(int argc, char *argv[])
>
> if (fargs->remote && opts.ssh_prog == NULL) {
> assert(fargs->mode == FARGS_RECEIVER);
> - if ((rc = rsync_connect(&opts, &sd, fargs)) == 0)
> + if ((rc = rsync_connect(&opts, &sd, fargs)) == 0) {
> rc = rsync_socket(&opts, sd, fargs);
> + close(sd);
> + }
> exit(rc);
> }
>
> @@ -484,14 +486,7 @@ main(int argc, char *argv[])
> break;
> }
>
> - /*
> - * If the client has an error and exits, the server may be
> - * sitting around waiting to get data while we waitpid().
> - * So close the connection here so that they don't hang.
> - */
> -
> - if (rc)
> - close(fds[0]);
> + close(fds[0]);
>
> if (waitpid(child, &st, 0) == -1)
> err(1, "waitpid");
> Index: socket.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/rsync/socket.c,v
> retrieving revision 1.24
> diff -u -p -r1.24 socket.c
> --- socket.c 8 May 2019 21:30:11 -0000 1.24
> +++ socket.c 3 Jun 2019 14:26:44 -0000
> @@ -455,6 +455,5 @@ rsync_socket(const struct opts *opts, in
> rc = 0;
> out:
> free(args);
> - close(sd);
> return rc;
> }
> --
> Christian "naddy" Weisgerber [email protected]
>