aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/proc.c
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2011-04-21 12:09:25 -0400
committerRuss Cox <rsc@golang.org>2011-04-21 12:09:25 -0400
commit29d78f124348d897a505e28fb28058d9a13163d0 (patch)
treeb449f15a7105ff1fcc67d7dce42e737132020291 /src/pkg/runtime/proc.c
parentbad5673c8f434b30803c879f4e969cf74c247e1c (diff)
downloadgo-29d78f124348d897a505e28fb28058d9a13163d0.tar.xz
runtime: fix GOMAXPROCS vs garbage collection bug
Fixes #1715. R=golang-dev, rsc1, rsc CC=golang-dev https://golang.org/cl/4434053
Diffstat (limited to 'src/pkg/runtime/proc.c')
-rw-r--r--src/pkg/runtime/proc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c
index e212c7820f..a823dc6928 100644
--- a/src/pkg/runtime/proc.c
+++ b/src/pkg/runtime/proc.c
@@ -1196,6 +1196,12 @@ runtime·gomaxprocsfunc(int32 n)
if (n <= 0)
n = ret;
runtime·gomaxprocs = n;
+ if (runtime·gcwaiting != 0) {
+ if (runtime·sched.mcpumax != 1)
+ runtime·throw("invalid runtime·sched.mcpumax during gc");
+ schedunlock();
+ return ret;
+ }
runtime·sched.mcpumax = n;
// handle fewer procs?
if(runtime·sched.mcpu > runtime·sched.mcpumax) {