From: Russ Cox Date: Fri, 28 Feb 2014 03:43:34 +0000 (-0500) Subject: [release-branch.go1.2] runtime: fix data race in GC X-Git-Tag: go1.2.1~4 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=495b91430f7914b221d7507e60b065733e2d34c4;p=gostls13.git [release-branch.go1.2] runtime: fix data race in GC ««« CL 52090045 / 302bdb5b08b1 runtime: fix data race in GC Fixes #5139. Update #7065. R=golang-codereviews, bradfitz, minux.ma CC=golang-codereviews https://golang.org/cl/52090045 »»» LGTM=r R=golang-codereviews, r CC=golang-dev https://golang.org/cl/69790043 --- diff --git a/src/pkg/runtime/mgc0.c b/src/pkg/runtime/mgc0.c index 4b2108ba7a..761f128a85 100644 --- a/src/pkg/runtime/mgc0.c +++ b/src/pkg/runtime/mgc0.c @@ -1798,6 +1798,8 @@ runtime·memorydump(void) void runtime·gchelper(void) { + int32 nproc; + gchelperstart(); // parallel mark for over gc roots @@ -1814,7 +1816,8 @@ runtime·gchelper(void) runtime·parfordo(work.sweepfor); 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); }