mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: in exitsyscall, avoid confusing garbage collector
R=r CC=golang-dev https://golang.org/cl/178046
This commit is contained in:
parent
31de4d4c5d
commit
19c18358ca
1 changed files with 6 additions and 1 deletions
|
|
@ -566,14 +566,19 @@ runtime·exitsyscall(void)
|
||||||
unlock(&sched);
|
unlock(&sched);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g->status = Grunning;
|
|
||||||
sched.msyscall--;
|
sched.msyscall--;
|
||||||
sched.mcpu++;
|
sched.mcpu++;
|
||||||
// Fast path - if there's room for this m, we're done.
|
// Fast path - if there's room for this m, we're done.
|
||||||
if(sched.mcpu <= sched.mcpumax) {
|
if(sched.mcpu <= sched.mcpumax) {
|
||||||
|
g->status = Grunning;
|
||||||
unlock(&sched);
|
unlock(&sched);
|
||||||
return;
|
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);
|
unlock(&sched);
|
||||||
|
|
||||||
// Slow path - all the cpus are taken.
|
// Slow path - all the cpus are taken.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue