mirror of https://github.com/golang/go.git
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
This commit is contained in:
parent
5b79aa82ff
commit
f84d5dd475
|
|
@ -30,6 +30,11 @@ void*
|
|||
runtime·FixAlloc_Alloc(FixAlloc *f)
|
||||
{
|
||||
void *v;
|
||||
|
||||
if(f->size == 0) {
|
||||
runtime·printf("runtime: use of FixAlloc_Alloc before FixAlloc_Init\n");
|
||||
runtime·throw("runtime: internal error");
|
||||
}
|
||||
|
||||
if(f->list) {
|
||||
v = f->list;
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Reference in New Issue