From c1df3803c6ae4824f4b9e6dda8f88882598fb5b7 Mon Sep 17 00:00:00 2001 From: des Date: Mon, 17 Jul 2000 20:49:39 +0000 Subject: 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. --- lib/libfetch/common.c | 4 ++-- lib/libfetch/fetch.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/libfetch') diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c index e4dbf3a..c03b1f5 100644 --- a/lib/libfetch/common.c +++ b/lib/libfetch/common.c @@ -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; diff --git a/lib/libfetch/fetch.c b/lib/libfetch/fetch.c index 5d83db5..adb95c9 100644 --- a/lib/libfetch/fetch.c +++ b/lib/libfetch/fetch.c @@ -43,6 +43,7 @@ int fetchLastErrCode; char fetchLastErrString[MAXERRSTRING]; int fetchTimeout; +int fetchRestartCalls = 1; /*** Local data **************************************************************/ -- cgit v1.1