1
0
mirror of https://github.com/golang/go synced 2024-11-21 23:24:41 -07:00

runtime: avoid malloc during malloc

A fault during malloc might lead to the program's
first call to findfunc, which would in turn call malloc.
Don't do that.

Fixes #1777.

R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/5689047
This commit is contained in:
Russ Cox 2012-02-21 16:36:15 -05:00
parent d86213c371
commit fc7ed45b35

View File

@ -437,6 +437,9 @@ runtime·findfunc(uintptr addr)
// (Before enabling the signal handler,
// SetCPUProfileRate calls findfunc to trigger
// the initialization outside the handler.)
// Avoid deadlock on fault during malloc
// by not calling buildfuncs if we're already in malloc.
if(!m->mallocing && !m->gcing) {
if(runtime·atomicload(&funcinit) == 0) {
runtime·lock(&funclock);
if(funcinit == 0) {
@ -445,6 +448,7 @@ runtime·findfunc(uintptr addr)
}
runtime·unlock(&funclock);
}
}
if(nfunc == 0)
return nil;