From 6c21be09e3da01a7bf778c7a308cf59c5fa36068 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 14 Dec 2009 19:06:20 -0800 Subject: runtime: in exitsyscall, avoid confusing garbage collector R=r CC=golang-dev http://codereview.appspot.com/178046 --- src/pkg/runtime/proc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/pkg/runtime/proc.c') diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index f04cb6692..e81089bfa 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -566,14 +566,19 @@ runtime·exitsyscall(void) unlock(&sched); return; } - g->status = Grunning; sched.msyscall--; sched.mcpu++; // Fast path - if there's room for this m, we're done. if(sched.mcpu <= sched.mcpumax) { + g->status = Grunning; unlock(&sched); return; } + // Tell scheduler to put g back on the run queue: + // mostly equivalent to g->status = Grunning, + // but keeps the garbage collector from thinking + // that g is running right now, which it's not. + g->readyonstop = 1; unlock(&sched); // Slow path - all the cpus are taken. -- cgit v1.2.3