Used to fault trying to access l->list->next
when l->list == nil after MCentral_AllocList.
Now prints
runtime: out of memory: no room in arena for 65536-byte allocation (
536870912 in use)
throw: out of memory
followed by stack trace.
Fixes #1650.
R=r, dfc
CC=golang-dev
https://golang.org/cl/
4446062
// Replenish using central lists.
n = runtime·MCentral_AllocList(&runtime·mheap.central[sizeclass],
runtime·class_to_transfercount[sizeclass], &first);
+ if(n == 0)
+ runtime·throw("out of memory");
l->list = first;
l->nlist = n;
c->size += n*size;
// Allocate a multiple of 64kB (16 pages).
npage = (npage+15)&~15;
ask = npage<<PageShift;
- if(ask > h->arena_end - h->arena_used)
+ if(ask > h->arena_end - h->arena_used) {
+ runtime·printf("runtime: out of memory: no room in arena for %D-byte allocation (%D in use)\n", (uint64)ask, (uint64)(h->arena_used - h->arena_start));
return false;
+ }
if(ask < HeapAllocChunk && HeapAllocChunk <= h->arena_end - h->arena_used)
ask = HeapAllocChunk;
ask = npage<<PageShift;
v = runtime·MHeap_SysAlloc(h, ask);
}
- if(v == nil)
+ if(v == nil) {
+ runtime·printf("runtime: out of memory: operating system refused %D-byte allocation\n", (uint64)ask);
return false;
+ }
}
mstats.heap_sys += ask;