From 35724c1aa5f9370093851c92fb61b482260bb834 Mon Sep 17 00:00:00 2001 From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com> Date: Tue, 18 Sep 2012 14:30:01 -0400 Subject: [PATCH] runtime: hide the semaphore table from garbage collector R=rsc, dvyukov, dave CC=golang-dev https://golang.org/cl/6528043 --- src/pkg/runtime/sema.goc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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.