From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com> Date: Tue, 18 Sep 2012 18:30:01 +0000 (-0400) Subject: runtime: hide the semaphore table from garbage collector X-Git-Tag: go1.1rc2~2415 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=35724c1aa5f9370093851c92fb61b482260bb834;p=gostls13.git runtime: hide the semaphore table from garbage collector R=rsc, dvyukov, dave CC=golang-dev https://golang.org/cl/6528043 --- diff --git a/src/pkg/runtime/sema.goc b/src/pkg/runtime/sema.goc index 8b9cef4b37..5fac830fcf 100644 --- a/src/pkg/runtime/sema.goc +++ b/src/pkg/runtime/sema.goc @@ -43,11 +43,13 @@ struct SemaRoot // Prime to not correlate with any user patterns. #define SEMTABLESZ 251 -static union +union semtable { SemaRoot; uint8 pad[CacheLineSize]; -} semtable[SEMTABLESZ]; +}; +#pragma dataflag 16 /* mark semtable as 'no pointers', hiding from garbage collector */ +static union semtable semtable[SEMTABLESZ]; static SemaRoot* semroot(uint32 *addr) @@ -98,7 +100,7 @@ cansemacquire(uint32 *addr) void runtime·semacquire(uint32 volatile *addr) { - Sema s; + Sema s; // Needs to be allocated on stack, otherwise garbage collector could deallocate it SemaRoot *root; // Easy case.