From ed8bdf461b5f8093957a11f526032d42938af7ca Mon Sep 17 00:00:00 2001 From: Jamie Liu Date: Wed, 2 Dec 2020 19:06:41 -0800 Subject: Consolidate most synchronization primitive linknames in the sync package. PiperOrigin-RevId: 345359823 --- pkg/sync/norace_unsafe.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'pkg/sync/norace_unsafe.go') diff --git a/pkg/sync/norace_unsafe.go b/pkg/sync/norace_unsafe.go index 006055dd6..70b5f3a5e 100644 --- a/pkg/sync/norace_unsafe.go +++ b/pkg/sync/norace_unsafe.go @@ -8,6 +8,7 @@ package sync import ( + "sync/atomic" "unsafe" ) @@ -33,3 +34,13 @@ func RaceRelease(addr unsafe.Pointer) { // RaceReleaseMerge has the same semantics as runtime.RaceReleaseMerge. func RaceReleaseMerge(addr unsafe.Pointer) { } + +// RaceUncheckedAtomicCompareAndSwapUintptr is equivalent to +// sync/atomic.CompareAndSwapUintptr, but is not checked by the race detector. +// This is necessary when implementing gopark callbacks, since no race context +// is available during their execution. +func RaceUncheckedAtomicCompareAndSwapUintptr(ptr *uintptr, old, new uintptr) bool { + // Use atomic.CompareAndSwapUintptr outside of race builds for + // inlinability. + return atomic.CompareAndSwapUintptr(ptr, old, new) +} -- cgit v1.2.3