]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: introduce a type for span states
authorAustin Clements <austin@google.com>
Fri, 9 Sep 2016 14:31:27 +0000 (10:31 -0400)
committerAustin Clements <austin@google.com>
Mon, 3 Oct 2016 21:59:45 +0000 (21:59 +0000)
Currently span states are untyped constants and the field is just a
uint8. Make this more type-safe by introducing a type for the span
state.

Change-Id: I369bf59fe6e8234475f4921611424fceb7d0a6de
Reviewed-on: https://go-review.googlesource.com/30141
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/mheap.go

index dfb484c06e6119fc1417b6d4811acf1c238bee49..808f1419465eebb7b123a162ce860873304b96c5 100644 (file)
@@ -102,9 +102,11 @@ var mheap_ mheap
 // * During GC (gcphase != _GCoff), a span *must not* transition from
 //   stack or in-use to free. Because concurrent GC may read a pointer
 //   and then look up its span, the span state must be monotonic.
+type mSpanState uint8
+
 const (
-       _MSpanInUse = iota // allocated for garbage collected heap
-       _MSpanStack        // allocated for use by stack allocator
+       _MSpanInUse mSpanState = iota // allocated for garbage collected heap
+       _MSpanStack                   // allocated for use by stack allocator
        _MSpanFree
        _MSpanDead
 )
@@ -186,21 +188,21 @@ type mspan struct {
        // h->sweepgen is incremented by 2 after every GC
 
        sweepgen    uint32
-       divMul      uint32   // for divide by elemsize - divMagic.mul
-       allocCount  uint16   // capacity - number of objects in freelist
-       sizeclass   uint8    // size class
-       incache     bool     // being used by an mcache
-       state       uint8    // mspaninuse etc
-       needzero    uint8    // needs to be zeroed before allocation
-       divShift    uint8    // for divide by elemsize - divMagic.shift
-       divShift2   uint8    // for divide by elemsize - divMagic.shift2
-       elemsize    uintptr  // computed from sizeclass or from npages
-       unusedsince int64    // first time spotted by gc in mspanfree state
-       npreleased  uintptr  // number of pages released to the os
-       limit       uintptr  // end of data in span
-       speciallock mutex    // guards specials list
-       specials    *special // linked list of special records sorted by offset.
-       baseMask    uintptr  // if non-0, elemsize is a power of 2, & this will get object allocation base
+       divMul      uint32     // for divide by elemsize - divMagic.mul
+       allocCount  uint16     // capacity - number of objects in freelist
+       sizeclass   uint8      // size class
+       incache     bool       // being used by an mcache
+       state       mSpanState // mspaninuse etc
+       needzero    uint8      // needs to be zeroed before allocation
+       divShift    uint8      // for divide by elemsize - divMagic.shift
+       divShift2   uint8      // for divide by elemsize - divMagic.shift2
+       elemsize    uintptr    // computed from sizeclass or from npages
+       unusedsince int64      // first time spotted by gc in mspanfree state
+       npreleased  uintptr    // number of pages released to the os
+       limit       uintptr    // end of data in span
+       speciallock mutex      // guards specials list
+       specials    *special   // linked list of special records sorted by offset.
+       baseMask    uintptr    // if non-0, elemsize is a power of 2, & this will get object allocation base
 }
 
 func (s *mspan) base() uintptr {