diff options
| author | Michael Matloob <matloob@golang.org> | 2026-01-06 17:18:48 -0500 |
|---|---|---|
| committer | Michael Matloob <matloob@google.com> | 2026-01-07 12:44:45 -0800 |
| commit | 874d8b98eba8129559b97d2fdfa02ddeb88b95f9 (patch) | |
| tree | 46bcb9408e061d13d9e47b039e6091c5324002c7 /src/cmd | |
| parent | d1e7f49e3d1eb039d9d2aed3ba923459bd42aa7c (diff) | |
| download | go-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.go | 5 | ||||
| -rw-r--r-- | src/cmd/go/internal/work/gc.go | 3 |
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 |
