Introduce the (undocumented) variable fetchRestartCalls, which controls whether

or not interrupted system calls will be restarted. This fixes a bug where
fetch(1) would hang (potentially forever) if a server stopped responding,
because the signal handler would absorb the user's efforts to interrupt the
transfer.
This commit is contained in:
Dag-Erling Smørgrav 2000-07-17 20:49:39 +00:00
parent 7c80207e33
commit a1bb3f482a
2 changed files with 3 additions and 2 deletions

View File

@ -262,7 +262,7 @@ _fetch_getln(int fd, char **buf, size_t *size, size_t *len)
}
r = select(fd+1, &readfds, NULL, NULL, &wait);
if (r == -1) {
if (errno == EINTR)
if (errno == EINTR && fetchRestartCalls)
continue;
/* EBADF or EINVAL: shouldn't happen */
return -1;
@ -274,7 +274,7 @@ _fetch_getln(int fd, char **buf, size_t *size, size_t *len)
if (r == 0)
break;
if (r == -1) {
if (errno == EINTR)
if (errno == EINTR && fetchRestartCalls)
continue;
/* any other error is bad news */
return -1;

View File

@ -43,6 +43,7 @@
int fetchLastErrCode;
char fetchLastErrString[MAXERRSTRING];
int fetchTimeout;
int fetchRestartCalls = 1;
/*** Local data **************************************************************/