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>
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()
}
return c, func() {
tokensMu.Lock()
defer tokensMu.Unlock()
+ concurrentProcesses--
tokens += c
}
}
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
)
// 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