mirror of
https://github.com/golang/go
synced 2024-11-26 16:57:14 -07:00
use Note sched.stopped correctly
R=r DELTA=6 (5 added, 0 deleted, 1 changed) OCL=20777 CL=20779
This commit is contained in:
parent
4d6bccb0f1
commit
be629138ab
@ -59,6 +59,7 @@ struct Sched {
|
||||
int32 predawn; // running initialization, don't run new gs.
|
||||
|
||||
Note stopped; // one g can wait here for ms to stop
|
||||
int32 waitstop; // after setting this flag
|
||||
};
|
||||
|
||||
Sched sched;
|
||||
@ -352,7 +353,10 @@ nextgandunlock(void)
|
||||
throw("all goroutines are asleep - deadlock!");
|
||||
m->nextg = nil;
|
||||
noteclear(&m->havenextg);
|
||||
if(sched.waitstop) {
|
||||
sched.waitstop = 0;
|
||||
notewakeup(&sched.stopped);
|
||||
}
|
||||
unlock(&sched);
|
||||
|
||||
notesleep(&m->havenextg);
|
||||
@ -376,6 +380,7 @@ stoptheworld(void)
|
||||
sched.mcpumax = 1;
|
||||
while(sched.mcpu > 1) {
|
||||
noteclear(&sched.stopped);
|
||||
sched.waitstop = 1;
|
||||
unlock(&sched);
|
||||
notesleep(&sched.stopped);
|
||||
lock(&sched);
|
||||
|
Loading…
Reference in New Issue
Block a user