From f84d5dd4753890f32947e67c8a16d8ca22086551 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 14 Mar 2013 10:10:12 -0400 Subject: runtime: make panic possible before malloc is ready Otherwise startup problems can be difficult to debug. R=golang-dev, r CC=golang-dev https://golang.org/cl/7522046 --- src/pkg/runtime/panic.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/pkg/runtime/panic.c') diff --git a/src/pkg/runtime/panic.c b/src/pkg/runtime/panic.c index 2f553f417e..fbcf6a572d 100644 --- a/src/pkg/runtime/panic.c +++ b/src/pkg/runtime/panic.c @@ -5,6 +5,7 @@ #include "runtime.h" #include "arch_GOARCH.h" #include "stack.h" +#include "malloc.h" // Code related to defer, panic and recover. @@ -383,7 +384,10 @@ nomatch: void runtime·startpanic(void) { - if(m->mcache == nil) // can happen if called from signal handler or throw + if(runtime·mheap == 0 || runtime·mheap->cachealloc.size == 0) { // very early + runtime·printf("runtime: panic before malloc heap initialized\n"); + m->mallocing = 1; // tell rest of panic not to try to malloc + } else if(m->mcache == nil) // can happen if called from signal handler or throw m->mcache = runtime·allocmcache(); if(m->dying) { runtime·printf("panic during panic\n"); -- cgit v1.3