1
0
mirror of https://github.com/golang/go synced 2024-11-12 09:20:22 -07:00

runtime: use gList in closechan

Change-Id: I8148eb17fe9f2cbb659c35d84cdd212b46dc23bf
Reviewed-on: https://go-review.googlesource.com/129401
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
Austin Clements 2018-08-10 10:34:41 -04:00
parent 083938df14
commit a034f310b0

View File

@ -343,7 +343,7 @@ func closechan(c *hchan) {
c.closed = 1
var glist *g
var glist gList
// release all readers
for {
@ -363,8 +363,7 @@ func closechan(c *hchan) {
if raceenabled {
raceacquireg(gp, unsafe.Pointer(c))
}
gp.schedlink.set(glist)
glist = gp
glist.push(gp)
}
// release all writers (they will panic)
@ -382,15 +381,13 @@ func closechan(c *hchan) {
if raceenabled {
raceacquireg(gp, unsafe.Pointer(c))
}
gp.schedlink.set(glist)
glist = gp
glist.push(gp)
}
unlock(&c.lock)
// Ready all Gs now that we've dropped the channel lock.
for glist != nil {
gp := glist
glist = glist.schedlink.ptr()
for !glist.empty() {
gp := glist.pop()
gp.schedlink = 0
goready(gp, 3)
}