func LoadUintptr(addr *uintptr) (val uintptr) { runtime.RaceSemacquire(&mtx) runtime.RaceAcquire(unsafe.Pointer(addr)) val = *addr runtime.RaceSemrelease(&mtx) return }
func StoreUintptr(addr *uintptr, val uintptr) { runtime.RaceSemacquire(&mtx) runtime.RaceRead(unsafe.Pointer(addr)) *addr = val runtime.RaceRelease(unsafe.Pointer(addr)) runtime.RaceSemrelease(&mtx) }
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 StorePointer(addr *unsafe.Pointer, val unsafe.Pointer) { _ = *addr runtime.RaceSemacquire(&mtx) runtime.RaceRead(unsafe.Pointer(addr)) *addr = val runtime.RaceRelease(unsafe.Pointer(addr)) runtime.RaceSemrelease(&mtx) }
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 StoreUint64(addr *uint64, val uint64) { runtime.RaceSemacquire(&mtx) *addr = val runtime.RaceRelease(unsafe.Pointer(addr)) runtime.RaceSemrelease(&mtx) }