1
0
mirror of https://github.com/golang/go synced 2024-11-21 14:34:41 -07:00

runtime: hide the semaphore table from garbage collector

R=rsc, dvyukov, dave
CC=golang-dev
https://golang.org/cl/6528043
This commit is contained in:
Jan Ziak 2012-09-18 14:30:01 -04:00 committed by Russ Cox
parent 8c058b32d1
commit 35724c1aa5

View File

@ -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.