1
0
mirror of https://github.com/golang/go synced 2024-11-23 18:20:04 -07:00

runtime: start goroutine ids at 1

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews, khr
https://golang.org/cl/117810043
This commit is contained in:
Dmitriy Vyukov 2014-07-16 12:19:33 +04:00
parent c12c5dba9c
commit aa76377423
2 changed files with 19 additions and 0 deletions

View File

@ -167,6 +167,14 @@ func TestGoNil(t *testing.T) {
}
}
func TestMainGoroutineId(t *testing.T) {
output := executeTest(t, mainGoroutineIdSource, nil)
want := "panic: test\n\ngoroutine 1 [running]:\n"
if !strings.HasPrefix(output, want) {
t.Fatalf("output does not start with %q:\n%s", want, output)
}
}
const crashSource = `
package main
@ -365,3 +373,10 @@ func main() {
select{}
}
`
const mainGoroutineIdSource = `
package main
func main() {
panic("test")
}
`

View File

@ -1882,7 +1882,11 @@ runtime·newproc1(FuncVal *fn, byte *argp, int32 narg, int32 nret, void *callerp
newg->gopc = (uintptr)callerpc;
newg->status = Grunnable;
if(p->goidcache == p->goidcacheend) {
// Sched.goidgen is the last allocated id,
// this batch must be [sched.goidgen+1, sched.goidgen+GoidCacheBatch].
// At startup sched.goidgen=0, so main goroutine receives goid=1.
p->goidcache = runtime·xadd64(&runtime·sched.goidgen, GoidCacheBatch);
p->goidcache -= GoidCacheBatch - 1;
p->goidcacheend = p->goidcache + GoidCacheBatch;
}
newg->goid = p->goidcache++;