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>
This commit is contained in:
Michael Matloob
2026-01-06 17:18:48 -05:00
committed by Michael Matloob
parent d1e7f49e3d
commit 874d8b98eb
2 changed files with 8 additions and 0 deletions

View File

@@ -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()
}

View File

@@ -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