Commit 93689d86 authored by Russ Cox's avatar Russ Cox

keep a list of all the M's,

so that the garbage collector doesn't free them.

R=ken
OCL=35538
CL=35538
parent d5c41427
......@@ -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++;
......
......@@ -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;
......
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