aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/runtime/mcache.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/runtime/mcache.go')
-rw-r--r--libgo/go/runtime/mcache.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/libgo/go/runtime/mcache.go b/libgo/go/runtime/mcache.go
index 2045158..ca92682 100644
--- a/libgo/go/runtime/mcache.go
+++ b/libgo/go/runtime/mcache.go
@@ -76,10 +76,13 @@ func (p gclinkptr) ptr() *gclink {
var emptymspan mspan
func allocmcache() *mcache {
- lock(&mheap_.lock)
- c := (*mcache)(mheap_.cachealloc.alloc())
- c.flushGen = mheap_.sweepgen
- unlock(&mheap_.lock)
+ var c *mcache
+ systemstack(func() {
+ lock(&mheap_.lock)
+ c = (*mcache)(mheap_.cachealloc.alloc())
+ c.flushGen = mheap_.sweepgen
+ unlock(&mheap_.lock)
+ })
for i := range c.alloc {
c.alloc[i] = &emptymspan
}