1
0
mirror of https://github.com/golang/go synced 2024-11-24 00:30:15 -07:00

runtime: fix data race in GC

Fixes #5139.
Update #7065.

R=golang-codereviews, bradfitz, minux.ma
CC=golang-codereviews
https://golang.org/cl/52090045
This commit is contained in:
Dmitriy Vyukov 2014-01-15 19:38:08 +04:00
parent 89c9d6b7f8
commit b3a3afc9b7

View File

@ -1956,6 +1956,8 @@ runtime·memorydump(void)
void void
runtime·gchelper(void) runtime·gchelper(void)
{ {
int32 nproc;
gchelperstart(); gchelperstart();
// parallel mark for over gc roots // parallel mark for over gc roots
@ -1972,7 +1974,8 @@ runtime·gchelper(void)
runtime·parfordo(work.sweepfor); runtime·parfordo(work.sweepfor);
bufferList[m->helpgc].busy = 0; bufferList[m->helpgc].busy = 0;
if(runtime·xadd(&work.ndone, +1) == work.nproc-1) nproc = work.nproc; // work.nproc can change right after we increment work.ndone
if(runtime·xadd(&work.ndone, +1) == nproc-1)
runtime·notewakeup(&work.alldone); runtime·notewakeup(&work.alldone);
} }