]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: simplify free count calculation in (un)cacheSpan
authorAustin Clements <austin@google.com>
Tue, 25 Sep 2018 21:24:30 +0000 (17:24 -0400)
committerAustin Clements <austin@google.com>
Tue, 9 Oct 2018 18:20:23 +0000 (18:20 +0000)
For unclear reasons, cacheSpan and uncacheSpan compute the number of
elements in a span by dividing its size by the element size. This
number is simply available in the mspan structure, so just use it.

Change-Id: If2e5de6ecec39befd3324bf1da4a275ad000932f
Reviewed-on: https://go-review.googlesource.com/c/138656
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/mcentral.go

index d94b95792cd3bb99d3c8949348c91b7462e02234..d9bc8b4719403cc776773ff576c8279ca93814e8 100644 (file)
@@ -117,8 +117,7 @@ havespan:
        if trace.enabled && !traceDone {
                traceGCSweepDone()
        }
-       cap := int32((s.npages << _PageShift) / s.elemsize)
-       n := cap - int32(s.allocCount)
+       n := int(s.nelems) - int(s.allocCount)
        if n == 0 || s.freeindex == s.nelems || uintptr(s.allocCount) == s.nelems {
                throw("span has no free objects")
        }
@@ -168,8 +167,7 @@ func (c *mcentral) uncacheSpan(s *mspan) {
                atomic.Store(&s.sweepgen, sg)
        }
 
-       cap := int32((s.npages << _PageShift) / s.elemsize)
-       n := cap - int32(s.allocCount)
+       n := int(s.nelems) - int(s.allocCount)
        if n > 0 {
                // cacheSpan updated alloc assuming all objects on s
                // were going to be allocated. Adjust for any that