From: Wayne Davison Date: Sat, 4 Jun 2011 19:08:18 +0000 (-0700) Subject: Handle EINTR when reading the pre-xfer exec message. X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/e3bc529de9b7d0e98c492677f73a8127a1d74d35?hp=820f7a7b57c566f8f1fb25e7e9a96542d2d8c4aa Handle EINTR when reading the pre-xfer exec message. --- diff --git a/clientserver.c b/clientserver.c index 8fedbe66..91612ea0 100644 --- a/clientserver.c +++ b/clientserver.c @@ -374,7 +374,14 @@ static char *finish_pre_exec(pid_t pid, int write_fd, int read_fd, char *request /* Read the stdout from the pre-xfer exec program. This it is only * displayed to the user if the script also returns an error status. */ - for (bp = buf; msglen > 0 && (j = read(read_fd, bp, msglen)) > 0; msglen -= j) { + for (bp = buf; msglen > 0; msglen -= j) { + if ((j = read(read_fd, bp, msglen)) <= 0) { + if (j == 0) + break; + if (errno == EINTR) + continue; + break; /* Just ignore the read error for now... */ + } bp += j; if (j > 1 && bp[-1] == '\n' && bp[-2] == '\r') { bp--;