aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/malloc.go
diff options
context:
space:
mode:
authorFilippo Valsorda <filippo@golang.org>2018-10-15 17:09:34 -0400
committerFilippo Valsorda <filippo@golang.org>2018-10-15 17:09:34 -0400
commit623650b27aa42dd2ccd20fc4a79f8fe7b8559987 (patch)
treebfafa16d1bfd57fc1d9831c22e6e236be3d52281 /src/runtime/malloc.go
parent36c789b1fd72af5ff6e756794597a3a85e069998 (diff)
parent1961d8d72a53e780effa18bfa8dbe4e4282df0b2 (diff)
downloadgo-623650b27aa42dd2ccd20fc4a79f8fe7b8559987.tar.xz
[dev.boringcrypto] all: merge master into dev.boringcrypto
Change-Id: I218ba1b89a2df6e4335c6a5846889d9a04affe5d
Diffstat (limited to 'src/runtime/malloc.go')
-rw-r--r--src/runtime/malloc.go29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go
index 07e0a67240..c3fe1169dc 100644
--- a/src/runtime/malloc.go
+++ b/src/runtime/malloc.go
@@ -124,8 +124,6 @@ const (
// have the most objects per span.
maxObjsPerSpan = pageSize / 8
- mSpanInUse = _MSpanInUse
-
concurrentSweep = _ConcurrentSweep
_PageSize = 1 << _PageShift
@@ -328,27 +326,27 @@ var physPageSize uintptr
// may use larger alignment, so the caller must be careful to realign the
// memory obtained by sysAlloc.
//
-// SysUnused notifies the operating system that the contents
+// sysUnused notifies the operating system that the contents
// of the memory region are no longer needed and can be reused
// for other purposes.
-// SysUsed notifies the operating system that the contents
+// sysUsed notifies the operating system that the contents
// of the memory region are needed again.
//
-// SysFree returns it unconditionally; this is only used if
+// sysFree returns it unconditionally; this is only used if
// an out-of-memory error has been detected midway through
-// an allocation. It is okay if SysFree is a no-op.
+// an allocation. It is okay if sysFree is a no-op.
//
-// SysReserve reserves address space without allocating memory.
+// sysReserve reserves address space without allocating memory.
// If the pointer passed to it is non-nil, the caller wants the
-// reservation there, but SysReserve can still choose another
+// reservation there, but sysReserve can still choose another
// location if that one is unavailable.
-// NOTE: SysReserve returns OS-aligned memory, but the heap allocator
+// NOTE: sysReserve returns OS-aligned memory, but the heap allocator
// may use larger alignment, so the caller must be careful to realign the
// memory obtained by sysAlloc.
//
-// SysMap maps previously reserved address space for use.
+// sysMap maps previously reserved address space for use.
//
-// SysFault marks a (already sysAlloc'd) region to fault
+// sysFault marks a (already sysAlloc'd) region to fault
// if accessed. Used only for debugging the runtime.
func mallocinit() {
@@ -735,6 +733,9 @@ func nextFreeFast(s *mspan) gclinkptr {
// weight allocation. If it is a heavy weight allocation the caller must
// determine whether a new GC cycle needs to be started or if the GC is active
// whether this goroutine needs to assist the GC.
+//
+// Must run in a non-preemptible context since otherwise the owner of
+// c could change.
func (c *mcache) nextFree(spc spanClass) (v gclinkptr, s *mspan, shouldhelpgc bool) {
s = c.alloc[spc]
shouldhelpgc = false
@@ -745,9 +746,7 @@ func (c *mcache) nextFree(spc spanClass) (v gclinkptr, s *mspan, shouldhelpgc bo
println("runtime: s.allocCount=", s.allocCount, "s.nelems=", s.nelems)
throw("s.allocCount != s.nelems && freeIndex == s.nelems")
}
- systemstack(func() {
- c.refill(spc)
- })
+ c.refill(spc)
shouldhelpgc = true
s = c.alloc[spc]
@@ -993,7 +992,7 @@ func mallocgc(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
if shouldhelpgc {
if t := (gcTrigger{kind: gcTriggerHeap}); t.test() {
- gcStart(gcBackgroundMode, t)
+ gcStart(t)
}
}