git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/3] chainlint.pl: make CPU count computation more robust

From
ESEric Sunshine <ericsunshine@charter.net>
Date
May 20, 2024, 19:01 UTC
Message-ID
<20240520190131.94904-2-ericsunshine@charter.net>
In-Reply-To
<20240520190131.94904-1-ericsunshine@charter.net>
From: Eric Sunshine <sunshine@sunshineco.com>

There have been reports[1,2] of chainlint.pl failing to produce output when output is expected. In fact, the underlying problem is more severe: in these cases, it isn't doing any work at all, thus not checking Git tests for semantic problems. In the reported cases, the problem was tracked down to ncores() returning 0 for the CPU count, which resulted in chainlint.pl not performing any work (since it thought it had no cores on which to process).

In the reported cases, the reason for the failure was that the regular expression counting the number of processors reported by /proc/cpuinfo failed to find any matches, hence it counted 0 processors. Although fixing each case as it is reported allows chaining.pl to work correctly on that architecture, it does nothing to improve the overall robustness of the core count computation which may still return 0 on some yet untested architecture.

Address this shortcoming by ensuring that ncores() returns a sensible fallback value in all cases.

[1]: https://lore.kernel.org/git/pull.1385.git.git.1669148861635.gitgitgadget@gmail.com/ [2]: https://lore.kernel.org/git/8baa12f8d044265f1ddeabd64209e7ac0d3700ae.camel@physik.fu-berlin.de/

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 t/chainlint.pl | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/t/chainlint.pl b/t/chainlint.pl
index 556ee91a15..d9a2691889 100755
--- a/t/chainlint.pl
+++ b/t/chainlint.pl
@@ -716,11 +716,22 @@ sub fd_colors {
 
 sub ncores {
 	# Windows
-	return $ENV{NUMBER_OF_PROCESSORS} if exists($ENV{NUMBER_OF_PROCESSORS});
+	if (exists($ENV{NUMBER_OF_PROCESSORS})) {
+		my $ncpu = $ENV{NUMBER_OF_PROCESSORS};
+		return $ncpu > 0 ? $ncpu : 1;
+	}
 	# Linux / MSYS2 / Cygwin / WSL
-	do { local @ARGV='/proc/cpuinfo'; return scalar(grep(/^processor[\s\d]*:/, <>)); } if -r '/proc/cpuinfo';
+	if (open my $fh, '<', '/proc/cpuinfo') {
+		my $cpuinfo = do { local $/; <$fh> };
+		close($fh);
+		my @matches = ($cpuinfo =~ /^processor[\s\d]*:/mg);
+		return @matches ? scalar(@matches) : 1;
+	}
 	# macOS & BSD
-	return qx/sysctl -n hw.ncpu/ if $^O =~ /(?:^darwin$|bsd)/;
+	if ($^O =~ /(?:^darwin$|bsd)/) {
+		my $ncpu = qx/sysctl -n hw.ncpu/;
+		return $ncpu > 0 ? $ncpu : 1;
+	}
 	return 1;
 }
 
-- 
2.45.1
Previous: Eric SunshineNext: John Paul Adrian Glaubitz
Message 18 of 23 in “chainlint.pl: Extend regexp pattern for /proc/cpuinfo on Linux SPARC”
  1. chainlint.pl: Extend regexp pattern for /proc/cpuinfo on Linux SPARCJohn Paul Adrian Glaubitz, May 20, 2024
  2. Junio C HamanoMay 20, 2024
  3. John Paul Adrian GlaubitzMay 20, 2024
  4. Eric SunshineMay 20, 2024
  5. Eric SunshineMay 20, 2024
  6. Eric SunshineMay 20, 2024
  7. Junio C HamanoMay 20, 2024
  8. 0/3 improve chainlint.pl CPU count computationEric Sunshine, May 20, 2024
  9. 2/3 chainlint.pl: fix incorrect CPU count on Linux SPARCEric Sunshine, May 20, 2024
  10. Carlo Marcelo Arenas BelónMay 22, 2024
  11. John Paul Adrian GlaubitzMay 22, 2024
  12. Eric SunshineMay 22, 2024
  13. Junio C HamanoMay 22, 2024
  14. Eric SunshineMay 22, 2024
  15. John Paul Adrian GlaubitzMay 27, 2024
  16. Eric SunshineMay 27, 2024
  17. 3/3 chainlint.pl: latch CPU count directly reported by /proc/cpuinfoEric Sunshine, May 20, 2024
  18. 1/3 chainlint.pl: make CPU count computation more robustEric Sunshine, May 20, 2024
  19. John Paul Adrian GlaubitzMay 20, 2024
  20. Eric SunshineMay 20, 2024
  21. John Paul Adrian GlaubitzMay 20, 2024
  22. John Paul Adrian GlaubitzMay 21, 2024
  23. Eric SunshineMay 21, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.