src/pkg/runtime/mgc0.c | 5 ++++- diff --git a/src/pkg/runtime/mgc0.c b/src/pkg/runtime/mgc0.c index 4b2108ba7a12c04fc7ffd779986630a6effa6aea..761f128a85afb44ed5f52e4fc4153bde974479c0 100644 --- a/src/pkg/runtime/mgc0.c +++ b/src/pkg/runtime/mgc0.c @@ -1798,6 +1798,8 @@ void runtime·gchelper(void) { + int32 nproc; + gchelperstart(); // parallel mark for over gc roots @@ -1814,7 +1816,8 @@ } 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); }