From e3bc529de9b7d0e98c492677f73a8127a1d74d35 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 4 Jun 2011 12:08:18 -0700 Subject: [PATCH] Handle EINTR when reading the pre-xfer exec message. --- clientserver.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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--; -- 2.34.1