func LoadUintptr(addr *uintptr) (val uintptr) { runtime.RaceSemacquire(&mtx) runtime.RaceAcquire(unsafe.Pointer(addr)) val = *addr runtime.RaceSemrelease(&mtx) return }
func LoadPointer(addr *unsafe.Pointer) (val unsafe.Pointer) { runtime.RaceSemacquire(&mtx) runtime.RaceRead(unsafe.Pointer(addr)) runtime.RaceAcquire(unsafe.Pointer(addr)) val = *addr runtime.RaceSemrelease(&mtx) return }
func LoadUint64(addr *uint64) (val uint64) { _ = *addr runtime.RaceSemacquire(&mtx) runtime.RaceRead(unsafe.Pointer(addr)) runtime.RaceAcquire(unsafe.Pointer(addr)) val = *addr runtime.RaceSemrelease(&mtx) return }
func AddUint64(val *uint64, delta uint64) (new uint64) { runtime.RaceSemacquire(&mtx) runtime.RaceAcquire(unsafe.Pointer(val)) *val = *val + delta new = *val runtime.RaceReleaseMerge(unsafe.Pointer(val)) runtime.RaceSemrelease(&mtx) return }
func SwapPointer(addr *unsafe.Pointer, new unsafe.Pointer) (old unsafe.Pointer) { _ = *addr runtime.RaceSemacquire(&mtx) runtime.RaceRead(unsafe.Pointer(addr)) runtime.RaceAcquire(unsafe.Pointer(addr)) old = *addr *addr = new runtime.RaceReleaseMerge(unsafe.Pointer(addr)) runtime.RaceSemrelease(&mtx) return }
func CompareAndSwapUintptr(val *uintptr, old, new uintptr) (swapped bool) { swapped = false runtime.RaceSemacquire(&mtx) runtime.RaceAcquire(unsafe.Pointer(val)) if *val == old { *val = new swapped = true runtime.RaceReleaseMerge(unsafe.Pointer(val)) } runtime.RaceSemrelease(&mtx) return }
func raceAcquire(addr unsafe.Pointer) { runtime.RaceAcquire(addr) }