Fix fetch-clone in the presense of signals

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>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Linus Torvalds 2006-02-11 10:41:22 -08:00 коммит произвёл Junio C Hamano
Родитель c548cf4ee0
Коммит 98deeaa82f
1 изменённых файлов: 7 добавлений и 4 удалений

Просмотреть файл

@ -178,10 +178,13 @@ int receive_keep_pack(int fd[2], const char *me, int quiet)
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) {