aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorMichael Matloob <matloob@golang.org>2026-01-06 17:18:48 -0500
committerMichael Matloob <matloob@google.com>2026-01-07 12:44:45 -0800
commit874d8b98eba8129559b97d2fdfa02ddeb88b95f9 (patch)
tree46bcb9408e061d13d9e47b039e6091c5324002c7 /src/cmd
parentd1e7f49e3d1eb039d9d2aed3ba923459bd42aa7c (diff)
downloadgo-874d8b98eba8129559b97d2fdfa02ddeb88b95f9.tar.xz
cmd/go/internal/work: decrement concurrentProcesses when action finishes
This fixes a bug where we only incremented concurrentProcesses but never decremented it, causing us to run out of tokens and give all compiles -c=1 after a point. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64_c2s16-perf_vs_parent,gotip-linux-amd64_c3h88-perf_vs_parent,gotip-linux-arm64_c4ah72-perf_vs_parent,gotip-linux-arm64_c4as16-perf_vs_parent Change-Id: I41f4c1edb77004cbc1772d6d672045946a6a6964 Reviewed-on: https://go-review.googlesource.com/c/go/+/734260 Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Michael Matloob <matloob@google.com> TryBot-Bypass: Michael Matloob <matloob@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/go/internal/work/exec.go5
-rw-r--r--src/cmd/go/internal/work/gc.go3
2 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
index 654e9e9374..f2d1b1040b 100644
--- a/src/cmd/go/internal/work/exec.go
+++ b/src/cmd/go/internal/work/exec.go
@@ -248,6 +248,11 @@ func (b *Builder) Do(ctx context.Context, root *Action) {
wg.Wait()
+ if tokens != totalTokens || concurrentProcesses != 0 {
+ base.Fatalf("internal error: tokens not restored at end of build: tokens: %d, totalTokens: %d, concurrentProcesses: %d",
+ tokens, totalTokens, concurrentProcesses)
+ }
+
// Write action graph again, this time with timing information.
writeActionGraph()
}
diff --git a/src/cmd/go/internal/work/gc.go b/src/cmd/go/internal/work/gc.go
index 9a5e6c924c..fc74715f22 100644
--- a/src/cmd/go/internal/work/gc.go
+++ b/src/cmd/go/internal/work/gc.go
@@ -227,6 +227,7 @@ func compilerConcurrency() (int, func()) {
return c, func() {
tokensMu.Lock()
defer tokensMu.Unlock()
+ concurrentProcesses--
tokens += c
}
}
@@ -235,6 +236,7 @@ var maxCompilerConcurrency = runtime.GOMAXPROCS(0) // max value we will use for
var (
tokensMu sync.Mutex
+ totalTokens int // total number of tokens: this is used for checking that we get them all back in the end
tokens int // number of available tokens
concurrentProcesses int // number of currently running compiles
)
@@ -246,6 +248,7 @@ func initCompilerConcurrencyPool() {
// than what it was when we capped the concurrency to 4.
oldConcurrencyCap := min(4, maxCompilerConcurrency)
tokens = oldConcurrencyCap * cfg.BuildP
+ totalTokens = tokens
}
// trimpath returns the -trimpath argument to use