aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/mcentral.c
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2014-06-30 18:59:24 -0700
committerKeith Randall <khr@golang.org>2014-06-30 18:59:24 -0700
commit7c13860cd08352e785002cb97bd3baafd370e8bc (patch)
tree326e70940dba8dfd140cc67d69461d3e9ef488e6 /src/pkg/runtime/mcentral.c
parent54951023cb0a1743f7f3cb233ff424593bf1a131 (diff)
downloadgo-7c13860cd08352e785002cb97bd3baafd370e8bc.tar.xz
runtime: stack allocator, separate from mallocgc
In order to move malloc to Go, we need to have a separate stack allocator. If we run out of stack during malloc, malloc will not be available to allocate a new stack. Stacks are the last remaining FlagNoGC objects in the GC heap. Once they are out, we can get rid of the distinction between the allocated/blockboundary bits. (This will be in a separate change.) Fixes #7468 Fixes #7424 LGTM=rsc, dvyukov R=golang-codereviews, dvyukov, khr, dave, rsc CC=golang-codereviews https://golang.org/cl/104200047
Diffstat (limited to 'src/pkg/runtime/mcentral.c')
-rw-r--r--src/pkg/runtime/mcentral.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/pkg/runtime/mcentral.c b/src/pkg/runtime/mcentral.c
index 203558fca5..9291c24856 100644
--- a/src/pkg/runtime/mcentral.c
+++ b/src/pkg/runtime/mcentral.c
@@ -263,6 +263,8 @@ MCentral_Grow(MCentral *c)
runtime·unlock(c);
runtime·MGetSizeClassInfo(c->sizeclass, &size, &npages, &n);
s = runtime·MHeap_Alloc(&runtime·mheap, npages, c->sizeclass, 0, 1);
+ if(s->next != nil || s->prev != nil)
+ runtime·throw("internal error: MSpan should not be in a list");
if(s == nil) {
// TODO(rsc): Log out of memory
runtime·lock(c);