mirror of
https://github.com/golang/go
synced 2024-11-18 16:24:42 -07:00
runtime: introduce a type for span states
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>
This commit is contained in:
parent
5a6e511c61
commit
6879dbde4e
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user