diff options
| author | Rémy Oudompheng <oudomphe@phare.normalesup.org> | 2012-03-05 16:40:27 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2012-03-05 16:40:27 -0500 |
| commit | aa1aaee7fd96a76e595add58b9889b4cd6703d3a (patch) | |
| tree | 5acb6660fcdc1a8c7bc204adde4c6d2c4a3dca89 /src | |
| parent | 610b5b2fd8a31ac3855088a0ea2aece8d88d7521 (diff) | |
| download | go-aa1aaee7fd96a76e595add58b9889b4cd6703d3a.tar.xz | |
runtime: wait for main goroutine before setting GOMAXPROCS.
Fixes #3182.
R=golang-dev, dvyukov, rsc
CC=golang-dev, remy
https://golang.org/cl/5732057
Diffstat (limited to 'src')
| -rw-r--r-- | src/pkg/runtime/proc.c | 6 | ||||
| -rwxr-xr-x | src/run.bash | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index de7090c527..88e2b61388 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -200,7 +200,9 @@ runtime·schedinit(void) n = maxgomaxprocs; runtime·gomaxprocs = n; } - setmcpumax(runtime·gomaxprocs); + // wait for the main goroutine to start before taking + // GOMAXPROCS into account. + setmcpumax(1); runtime·singleproc = runtime·gomaxprocs == 1; canaddmcpu(); // mcpu++ to account for bootstrap m @@ -225,6 +227,8 @@ runtime·main(void) // by calling runtime.LockOSThread during initialization // to preserve the lock. runtime·LockOSThread(); + // From now on, newgoroutines may use non-main threads. + setmcpumax(runtime·gomaxprocs); runtime·sched.init = true; scvg = runtime·newproc1((byte*)runtime·MHeap_Scavenger, nil, 0, 0, runtime·main); main·init(); diff --git a/src/run.bash b/src/run.bash index fd3b1f27b7..fdbf47663b 100755 --- a/src/run.bash +++ b/src/run.bash @@ -26,8 +26,8 @@ echo '# Testing packages.' time go test std -short -timeout=120s echo -echo '# runtime -cpu=1,2,4' -go test runtime -short -timeout=120s -cpu=1,2,4 +echo '# GOMAXPROCS=2 runtime -cpu=1,2,4' +GOMAXPROCS=2 go test runtime -short -timeout=120s -cpu=1,2,4 echo echo '# sync -cpu=10' |
