From aa1aaee7fd96a76e595add58b9889b4cd6703d3a Mon Sep 17 00:00:00 2001 From: Rémy Oudompheng Date: Mon, 5 Mar 2012 16:40:27 -0500 Subject: runtime: wait for main goroutine before setting GOMAXPROCS. Fixes #3182. R=golang-dev, dvyukov, rsc CC=golang-dev, remy https://golang.org/cl/5732057 --- src/pkg/runtime/proc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/pkg/runtime') 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(); -- cgit v1.3