From: Austin Clements Date: Tue, 25 Sep 2018 21:24:30 +0000 (-0400) Subject: runtime: simplify free count calculation in (un)cacheSpan X-Git-Tag: go1.12beta1~844 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=416804f3e24b25cf3e291fbbe5857cc28644a852;p=gostls13.git runtime: simplify free count calculation in (un)cacheSpan 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/runtime/mcentral.go b/src/runtime/mcentral.go index d94b95792c..d9bc8b4719 100644 --- a/src/runtime/mcentral.go +++ b/src/runtime/mcentral.go @@ -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