From: Russ Cox Date: Fri, 9 Oct 2009 22:35:33 +0000 (-0700) Subject: keep a list of all the M's, X-Git-Tag: weekly.2009-11-06~362 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=93689d863c1d804c13f07c756b16f9fe3b36e061;p=gostls13.git keep a list of all the M's, so that the garbage collector doesn't free them. R=ken OCL=35538 CL=35538 --- diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index e3c7beccdf..f6f2bb2b36 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -11,7 +11,6 @@ M m0; G g0; // idle goroutine for m0 static int32 debug = 0; -static Lock debuglock; // Go scheduler // @@ -96,6 +95,8 @@ schedinit(void) { int32 n; byte *p; + + allm = m; mallocinit(); goargs(); @@ -416,6 +417,10 @@ matchmg(void) // Find the m that will run g. if((m = mget(g)) == nil){ m = malloc(sizeof(M)); + // Add to allm so garbage collector doesn't free m + // when it is just in a register (R14 on amd64). + m->alllink = allm; + allm = m; m->g0 = malg(8192); m->id = sched.mcount++; diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h index d3027b9ce6..b44eb929cc 100644 --- a/src/pkg/runtime/runtime.h +++ b/src/pkg/runtime/runtime.h @@ -206,6 +206,7 @@ struct M int32 waitnextg; Note havenextg; G* nextg; + M* alllink; // on allm M* schedlink; Mem mem; uint32 machport; // Return address for Mach IPC (OS X) @@ -307,6 +308,7 @@ struct Defer extern Alg algarray[Amax]; extern String emptystring; G* allg; +M* allm; int32 goidgen; extern int32 gomaxprocs; extern int32 panicking;