From: Russ Cox Date: Tue, 17 Nov 2009 22:42:08 +0000 (-0800) Subject: runtime: do not create new threads during malloc. X-Git-Tag: weekly.2009-11-17~7 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4dfd7fdde5957e4f3ba1a0285333f7c807c28f03;p=gostls13.git 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 --- diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 668a478a80..35e2ad77ea 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -146,7 +146,7 @@ tracebackothers(G *me) for(g = allg; g != nil; g = g->alllink) { if(g == me || g->status == Gdead) continue; - printf("\ngoroutine %d:\n", g->goid); + printf("\ngoroutine %d [%d]:\n", g->goid, g->status); traceback(g->sched.pc, g->sched.sp, g); } } @@ -411,10 +411,13 @@ struct CgoThreadStart static void matchmg(void) { - M *m; G *g; + if(m->mallocing) + return; while(sched.mcpu < sched.mcpumax && (g = gget()) != nil){ + M *m; + // Find the m that will run g. if((m = mget(g)) == nil){ m = malloc(sizeof(M));