From 1ac65f82adf00f6af925a266b9c8282325b3c39f Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Thu, 12 Feb 2015 15:20:13 -0500 Subject: [PATCH] runtime: eliminate b == 0 special case from scanblock We no longer ever call scanblock with b == 0. Change-Id: I9b01da39595e0cc251668c24d58748d88f5f0792 Reviewed-on: https://go-review.googlesource.com/4782 Reviewed-by: Russ Cox Reviewed-by: Rick Hudson --- src/runtime/mgc.go | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go index 3f361c1b4d..27b3b1158f 100644 --- a/src/runtime/mgc.go +++ b/src/runtime/mgc.go @@ -422,8 +422,6 @@ func scanobject(b, n uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf { // scanblock starts by scanning b as scanobject would. // If the gcphase is GCscan, that's all scanblock does. // Otherwise it traverses some fraction of the pointers it found in b, recursively. -// As a special case, scanblock(nil, 0, nil) means to scan previously queued work, -// stopping only when no work is left in the system. //go:nowritebarrier func scanblock(b0, n0 uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf { // Use local copies of original parameters, so that a stack trace @@ -439,19 +437,16 @@ func scanblock(b0, n0 uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf { if wbuf == nil { wbuf = getpartialorempty(460) // no wbuf passed in. } - if b != 0 { - wbuf = scanobject(b, n, ptrmask, wbuf) - if gcphase == _GCscan { - if inheap(b) && ptrmask == nil { - // b is in heap, we are in GCscan so there should be a ptrmask. - throw("scanblock: In GCscan phase and inheap is true.") - } - return wbuf + wbuf = scanobject(b, n, ptrmask, wbuf) + if gcphase == _GCscan { + if inheap(b) && ptrmask == nil { + // b is in heap, we are in GCscan so there should be a ptrmask. + throw("scanblock: In GCscan phase and inheap is true.") } + return wbuf } - drainallwbufs := b == 0 - drainworkbuf(wbuf, drainallwbufs) + drainworkbuf(wbuf, false) return nil }