Fix fetch-clone in the presense of signals

From: Linus Torvalds <torvalds@osdl.org>
Date: 2006-02-12 05:41:22
We shouldn't fail a fetch just because a signal might have interrupted
the read.

Normally, we don't install any signal handlers, so EINTR really shouldn't 
happen. That said, really old versions of Linux will interrupt an 
interruptible system call even for signals that turn out to be ignored 
(SIGWINCH is the classic example - resizing your xterm would cause it). 
The same might well be true elsewhere too.

Also, since receive_keep_pack() doesn't control the caller, it can't know 
that no signal handlers exist.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---

diff --git a/fetch-clone.c b/fetch-clone.c
index b67d976..d8216cb 100644
--- a/fetch-clone.c
+++ b/fetch-clone.c
@@ -153,10 +153,13 @@ int receive_keep_pack(int fd[2], const c
 		if (sz == 0)
 			break;
 		if (sz < 0) {
-			error("error reading pack (%s)", strerror(errno));
-			close(ofd);
-			unlink(tmpfile);
-			return -1;
+			if (errno != EINTR && errno != EAGAIN) {
+				error("error reading pack (%s)", strerror(errno));
+				close(ofd);
+				unlink(tmpfile);
+				return -1;
+			}
+			sz = 0;
 		}
 		pos = 0;
 		while (pos < sz) {
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Sun Feb 12 05:42:02 2006

This archive was generated by hypermail 2.1.8 : 2006-02-12 05:42:13 EST