mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: note custom GOMAXPROCS even if value doesn't change
When an application calls runtime.GOMAXPROCS(runtime.GOMAXPROCS(0)), the runtime does not need to change the actual GOMAXPROCS value (via STW). However, this call must still transition from "automatic" to "custom" GOMAXPROCS state, thus disabling background updates. Thus this case shouldn't return quite as early as it currently does. Change-Id: I6a6a636c42f73996532bd9f7beb95e933256c9e7 Reviewed-on: https://go-review.googlesource.com/c/go/+/683815 Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Carlos Amedee <carlos@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Michael Pratt <mpratt@google.com>
This commit is contained in:
parent
e515ef8bc2
commit
f069a82998
2 changed files with 21 additions and 1 deletions
|
|
@ -39,7 +39,7 @@ func GOMAXPROCS(n int) int {
|
|||
|
||||
lock(&sched.lock)
|
||||
ret := int(gomaxprocs)
|
||||
if n <= 0 || n == ret {
|
||||
if n <= 0 {
|
||||
unlock(&sched.lock)
|
||||
return ret
|
||||
}
|
||||
|
|
@ -52,6 +52,12 @@ func GOMAXPROCS(n int) int {
|
|||
lock(&computeMaxProcsLock)
|
||||
unlock(&computeMaxProcsLock)
|
||||
|
||||
if n == ret {
|
||||
// sched.customGOMAXPROCS set, but no need to actually STW
|
||||
// since the gomaxprocs itself isn't changing.
|
||||
return ret
|
||||
}
|
||||
|
||||
stw := stopTheWorldGC(stwGOMAXPROCS)
|
||||
|
||||
// newprocs will be processed by startTheWorld
|
||||
|
|
|
|||
14
src/runtime/testdata/testprog/gomaxprocs.go
vendored
14
src/runtime/testdata/testprog/gomaxprocs.go
vendored
|
|
@ -133,6 +133,20 @@ func UpdateGOMAXPROCS() {
|
|||
mustSetCPUMax(path, 200000)
|
||||
mustNotChangeMaxProcs(3)
|
||||
|
||||
// Re-enable updates. Change is immediately visible.
|
||||
runtime.SetDefaultGOMAXPROCS()
|
||||
procs = runtime.GOMAXPROCS(0)
|
||||
println("GOMAXPROCS:", procs)
|
||||
if procs != 2 {
|
||||
panic(fmt.Sprintf("GOMAXPROCS got %d want %d", procs, 2))
|
||||
}
|
||||
|
||||
// Setting GOMAXPROCS to itself also disables updates, despite not
|
||||
// changing the value itself.
|
||||
runtime.GOMAXPROCS(runtime.GOMAXPROCS(0))
|
||||
mustSetCPUMax(path, 300000)
|
||||
mustNotChangeMaxProcs(2)
|
||||
|
||||
println("OK")
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue