Commit 4dfd7fdd authored by Russ Cox's avatar Russ Cox

runtime: do not create new threads during malloc.

	the signal handling stack is a different size than
	the normal stack, so it cannot be allocated using
	the backup stack allocator.

Fixes #250.

R=agl1
CC=golang-dev
https://golang.org/cl/157044
parent 33d10e4d
...@@ -146,7 +146,7 @@ tracebackothers(G *me) ...@@ -146,7 +146,7 @@ tracebackothers(G *me)
for(g = allg; g != nil; g = g->alllink) { for(g = allg; g != nil; g = g->alllink) {
if(g == me || g->status == Gdead) if(g == me || g->status == Gdead)
continue; continue;
printf("\ngoroutine %d:\n", g->goid); printf("\ngoroutine %d [%d]:\n", g->goid, g->status);
traceback(g->sched.pc, g->sched.sp, g); traceback(g->sched.pc, g->sched.sp, g);
} }
} }
...@@ -411,10 +411,13 @@ struct CgoThreadStart ...@@ -411,10 +411,13 @@ struct CgoThreadStart
static void static void
matchmg(void) matchmg(void)
{ {
M *m;
G *g; G *g;
if(m->mallocing)
return;
while(sched.mcpu < sched.mcpumax && (g = gget()) != nil){ while(sched.mcpu < sched.mcpumax && (g = gget()) != nil){
M *m;
// Find the m that will run g. // Find the m that will run g.
if((m = mget(g)) == nil){ if((m = mget(g)) == nil){
m = malloc(sizeof(M)); m = malloc(sizeof(M));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment