From nobody Mon Jun 29 15:52:17 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gprPt26Dzz6jNg0 for ; Mon, 29 Jun 2026 15:52:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gprPs6BRYz3LLF for ; Mon, 29 Jun 2026 15:52:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782748337; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RPONdgsbkH0WzPDy5HBBq8V4oyXQk7Owlh5cnZmbKcE=; b=AaAQ3iJY9VW4lmWiSlLEQ9KJ8+bimyghkFczWdntC40VUJTqBxo+q+osN6bX0ZG8OWv7Tl 0kzuWH6aR312x/GrsA8SM5lBty8a1nn/ngHgQQV2GgVvaikHoPbN9G663eU8wsnRL+7D1n QQQI9ksd2CuzhXhqMZABIegyvliQSsP94KvAABGbCrVCZXodDJEXBVCoQhQBl/7K4ojLfC MdDBuJnW9C+EA3fFeTkUSpq5/hY01Cld56FAWyOiDvLnBBrlf2JlSpQriIM404+Ji5Lrst bR6D49zNjncTWAfR9DDSbO2Sp9wgTO4ejasMXbfNOKWxMWGnxjaYzpjUjr0Zew== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782748337; a=rsa-sha256; cv=none; b=R8G/0ssUF8JZkw3bstIgLyAa6SSjkQlSVmP/RpHC4eaTFcH44WVq4yZTVmQmrBokshYou2 vCK2D3NJhYpdavstvFbBrqvKK6F7+seDnG+lxw5sS+WVgHrWQJGPTxY/lnStA4fiPbcBlm pgIXEYn/Opo7ZfyQdMpcvDm+utQvL5E6kOBSMDTnIakp155q7WpOCIrAyD03z3c7S1XRAZ RMM4hlzO99UUIF2YNiQIF2MOkJrTl5OveeFO8ab+S7CSLaINzC94pHWr7xWJCgEgZbFM6G DcsZtdezO/cTbH+FvwB459RBWE632zwovZYxa6UqhH/AwWlJSKcQiMrsKOUvlA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782748337; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RPONdgsbkH0WzPDy5HBBq8V4oyXQk7Owlh5cnZmbKcE=; b=DNUQcPQbkirESUA4tzFuaQgRD3NFq7D0CsGUSPqHRP+t9pWVN4sR7kvqfinhh2kBJx9Ayt S7MKmJlEIVnhmXCEEVBhydYIy4V3VNg7EhvhEmY1CksKHepwB52T7SvQ/9ISeEW7pCQ64X BYxZO+CD7mLHDURj2iQH/bC0Zyn5UpvnznK8a994hlfOJ3XayCUaSeq116bptqHpVqppMT R2/vMVyPxPXQM2lR7ELwFIzdh0PSCb4RbeQXhLmjl0e3b4J4S/5slFUNf0QZyjCN/Q3iAh 9tF5cENJVyIXEqP62SGPQZaGAkhXdBzNwSlkAbJGh/PljLP+uprwJHGXbKjyog== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gprPs4vrRz13g7 for ; Mon, 29 Jun 2026 15:52:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bd9f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 29 Jun 2026 15:52:17 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 23380f3e6ac9 - main - fetch: Stop setting an alarm List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 23380f3e6ac9334e85489f92f7f20b700ede3368 Auto-Submitted: auto-generated Date: Mon, 29 Jun 2026 15:52:17 +0000 Message-Id: <6a4294b1.3bd9f.21e4d03e@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=23380f3e6ac9334e85489f92f7f20b700ede3368 commit 23380f3e6ac9334e85489f92f7f20b700ede3368 Author: Dag-Erling Smørgrav AuthorDate: 2026-06-27 15:41:22 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-06-29 13:49:19 +0000 fetch: Stop setting an alarm Now that fetchTimeout works reliably, setting an alarm is not only no longer necessary but counterproductive, as it will trigger even if the connection is not actually stalled but merely slow. While here, improve the wording of the manual page's description of the various options for setting a timeout. MFC after: 1 week --- usr.bin/fetch/fetch.1 | 10 ++++++---- usr.bin/fetch/fetch.c | 33 +++++++++------------------------ 2 files changed, 15 insertions(+), 28 deletions(-) diff --git a/usr.bin/fetch/fetch.1 b/usr.bin/fetch/fetch.1 index 7238226998fc..17b96d8d459b 100644 --- a/usr.bin/fetch/fetch.1 +++ b/usr.bin/fetch/fetch.1 @@ -28,7 +28,7 @@ .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd October 7, 2023 +.Dd June 27, 2026 .Dt FETCH 1 .Os .Sh NAME @@ -283,7 +283,7 @@ ignored and the file is fetched unconditionally. .It Fl s , -print-size Print the size in bytes of each requested file, without fetching it. .It Fl T Ar seconds , Fl -timeout= Ns Ar seconds -Set timeout value to +Set the network timeout to .Ar seconds . Overrides the environment variables .Ev FTP_TIMEOUT @@ -322,9 +322,11 @@ message. .Sh ENVIRONMENT .Bl -tag -width HTTP_TIMEOUT .It Ev FTP_TIMEOUT -Maximum time, in seconds, to wait before aborting an FTP connection. +Maximum time, in seconds, to wait before giving up on a stalled FTP +transfer. .It Ev HTTP_TIMEOUT -Maximum time, in seconds, to wait before aborting an HTTP connection. +Maximum time, in seconds, to wait before giving up on a stalled HTTP +transfer. .El .Pp See diff --git a/usr.bin/fetch/fetch.c b/usr.bin/fetch/fetch.c index 5e4b14289ca7..4e2a7596e796 100644 --- a/usr.bin/fetch/fetch.c +++ b/usr.bin/fetch/fetch.c @@ -87,7 +87,6 @@ static pid_t pgrp; /* our process group */ static long w_secs; /* -w: retry delay */ static int family = PF_UNSPEC; /* -[46]: address family to use */ -static int sigalrm; /* SIGALRM received */ static int siginfo; /* SIGINFO received */ static int sigint; /* SIGINT received */ @@ -173,9 +172,6 @@ static void sig_handler(int sig) { switch (sig) { - case SIGALRM: - sigalrm = 1; - break; case SIGINFO: siginfo = 1; break; @@ -436,6 +432,7 @@ fetch(char *URL, const char *path, int *is_http) char *tmppath; int r, tries; unsigned timeout; + int timedout = 0; char *ptr; f = of = NULL; @@ -519,13 +516,7 @@ fetch(char *URL, const char *path, int *is_http) /* just print size */ if (s_flag) { - if (timeout) - alarm(timeout); r = fetchStat(url, &us, flags); - if (timeout) - alarm(0); - if (sigalrm || sigint) - goto signal; if (r == -1) { warnx("%s", fetchLastErrString); goto failure; @@ -574,13 +565,7 @@ again: size_prev = sb.st_size; /* start the transfer */ - if (timeout) - alarm(timeout); f = fetchXGet(url, &us, flags); - if (timeout) - alarm(0); - if (sigalrm || sigint) - goto signal; if (f == NULL) { if (i_flag && *is_http && fetchLastErrCode == FETCH_OK && strcmp(fetchLastErrString, "Not Modified") == 0) { @@ -748,7 +733,7 @@ again: /* start the counter */ stat_start(&xs, path, us.size, count); - sigalrm = siginfo = sigint = 0; + siginfo = sigint = 0; /* suck in the data */ setvbuf(f, NULL, _IOFBF, B_size); @@ -785,8 +770,7 @@ again: if (readcnt != 0) break; } - if (!sigalrm) - sigalrm = ferror(f) && errno == ETIMEDOUT; + timedout = ferror(f) && errno == ETIMEDOUT; signal(SIGINFO, SIG_DFL); stat_end(&xs); @@ -811,18 +795,20 @@ again: } /* timed out or interrupted? */ - if (sigalrm) + if (timedout) { warnx("transfer timed out"); + goto failure; + } if (sigint) { warnx("transfer interrupted"); goto failure; } - /* timeout / interrupt before connection completley established? */ + /* timeout / interrupt before connection completely established? */ if (f == NULL) goto failure; - if (!sigalrm) { + if (!timedout) { /* check the status of our files */ if (ferror(f)) warn("%s", URL); @@ -850,7 +836,7 @@ again: * If the transfer timed out and we didn't know how much to * expect, assume the worst (i.e. we didn't get all of it) */ - if (sigalrm && us.size == -1) { + if (timedout && us.size == -1) { warnx("%s may be truncated", path); goto failure_keep; } @@ -1126,7 +1112,6 @@ main(int argc, char *argv[]) sa.sa_flags = 0; sa.sa_handler = sig_handler; sigemptyset(&sa.sa_mask); - sigaction(SIGALRM, &sa, NULL); sa.sa_flags = SA_RESETHAND; sigaction(SIGINT, &sa, NULL); fetchRestartCalls = 0;