diff options
Diffstat (limited to 'src/runtime/mgc0.c')
-rw-r--r-- | src/runtime/mgc0.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/runtime/mgc0.c b/src/runtime/mgc0.c index 1b41bf9a7..e5b6870c6 100644 --- a/src/runtime/mgc0.c +++ b/src/runtime/mgc0.c @@ -65,7 +65,7 @@ enum { Debug = 0, DebugPtrs = 0, // if 1, print trace of every pointer load during GC - ConcurrentSweep = 1, + ConcurrentSweep = 0, WorkbufSize = 4*1024, FinBlockSize = 4*1024, @@ -1784,7 +1784,7 @@ runtime·unrollgcprog_m(void) Type *typ; byte *mask, *prog; uintptr pos; - uint32 x; + uintptr x; typ = g->m->ptrarg[0]; g->m->ptrarg[0] = nil; @@ -1802,9 +1802,11 @@ runtime·unrollgcprog_m(void) prog = (byte*)typ->gc[1]; unrollgcprog1(mask, prog, &pos, false, true); } + // atomic way to say mask[0] = 1 - x = ((uint32*)mask)[0]; - runtime·atomicstore((uint32*)mask, x|1); + x = *(uintptr*)mask; + ((byte*)&x)[0] = 1; + runtime·atomicstorep((void**)mask, (void*)x); } runtime·unlock(&lock); } |