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

runtime: move checknocurrentwbuf() from scanblock to drainworkbuf

Previously, scanblock called checknocurrentwbuf() after
drainworkbuf().  Move this call into drainworkbuf so that every return
path from drainworkbuf calls checknocurrentwbuf().  This is equivalent
to the previous code because scanblock was the only caller of
drainworkbuf.

Change-Id: I96ef2168c8aa169bfc4d368f296342fa0fbeafb4
Reviewed-on: https://go-review.googlesource.com/4780
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
Austin Clements 2015-02-12 15:00:54 -05:00
parent c4ee44b7b9
commit c2de2f87f0

View File

@ -452,7 +452,6 @@ func scanblock(b0, n0 uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf {
drainallwbufs := b == 0
drainworkbuf(wbuf, drainallwbufs)
checknocurrentwbuf()
return nil
}
@ -471,13 +470,12 @@ func drainworkbuf(wbuf *workbuf, drainallwbufs bool) {
if wbuf.nobj == 0 {
putempty(wbuf, 496)
if !drainallwbufs {
checknocurrentwbuf()
return
break
}
// Refill workbuf from global queue.
wbuf = getfull(504)
if wbuf == nil { // nil means out of work barrier reached
return
break
}
wbuf.checknonempty()
}
@ -501,6 +499,7 @@ func drainworkbuf(wbuf *workbuf, drainallwbufs bool) {
// a performance hit as we keep fetching fresh wbufs.
wbuf = scanobject(b, 0, nil, wbuf)
}
checknocurrentwbuf()
}
// Scan count objects starting with those in wbuf.