]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: eliminate drainworkbufs from scanblock
authorAustin Clements <austin@google.com>
Thu, 12 Feb 2015 20:22:49 +0000 (15:22 -0500)
committerAustin Clements <austin@google.com>
Fri, 13 Feb 2015 15:34:39 +0000 (15:34 +0000)
scanblock is only called during _GCscan and _GCmarktermination.
During _GCscan, scanblock didn't call drainworkbufs anyway.  During
_GCmarktermination, there's really no point in draining some (largely
arbitrary) amount of work during the scanblock, since the GC is about
to drain everything anyway, so simply eliminate this case.

Change-Id: I7f3c59ce9186a83037c6f9e9b143181acd04c597
Reviewed-on: https://go-review.googlesource.com/4783
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/mgc.go

index 27b3b1158f75333dbbd51889940b3c057f5a6c33..4a9dcf1f50a4f741df000b22d6ecf78b43f563b8 100644 (file)
@@ -419,9 +419,8 @@ func scanobject(b, n uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf {
        return wbuf
 }
 
-// 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.
+// scanblock scans b as scanobject would.
+// If the gcphase is GCscan, scanblock performs additional checks.
 //go:nowritebarrier
 func scanblock(b0, n0 uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf {
        // Use local copies of original parameters, so that a stack trace
@@ -443,11 +442,8 @@ func scanblock(b0, n0 uintptr, ptrmask *uint8, wbuf *workbuf) *workbuf {
                        // 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
        }
-
-       drainworkbuf(wbuf, false)
-       return nil
+       return wbuf
 }
 
 // Scan objects in wbuf until wbuf is empty (and on empty queue) or