github.com/sagernet/gvisor@v0.0.0-20240428053021-e691de28565f/pkg/sync/race_unsafe.go (about)

     1  // Copyright 2019 The gVisor Authors.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  //go:build race
     7  // +build race
     8  
     9  package sync
    10  
    11  import (
    12  	"runtime"
    13  	"unsafe"
    14  )
    15  
    16  // RaceEnabled is true if the Go data race detector is enabled.
    17  const RaceEnabled = true
    18  
    19  // RaceDisable has the same semantics as runtime.RaceDisable.
    20  func RaceDisable() {
    21  	runtime.RaceDisable()
    22  }
    23  
    24  // RaceEnable has the same semantics as runtime.RaceEnable.
    25  func RaceEnable() {
    26  	runtime.RaceEnable()
    27  }
    28  
    29  // RaceAcquire has the same semantics as runtime.RaceAcquire.
    30  func RaceAcquire(addr unsafe.Pointer) {
    31  	runtime.RaceAcquire(addr)
    32  }
    33  
    34  // RaceRelease has the same semantics as runtime.RaceRelease.
    35  func RaceRelease(addr unsafe.Pointer) {
    36  	runtime.RaceRelease(addr)
    37  }
    38  
    39  // RaceReleaseMerge has the same semantics as runtime.RaceReleaseMerge.
    40  func RaceReleaseMerge(addr unsafe.Pointer) {
    41  	runtime.RaceReleaseMerge(addr)
    42  }
    43  
    44  // RaceUncheckedAtomicCompareAndSwapUintptr is equivalent to
    45  // sync/atomic.CompareAndSwapUintptr, but is not checked by the race detector.
    46  // This is necessary when implementing gopark callbacks, since no race context
    47  // is available during their execution.
    48  func RaceUncheckedAtomicCompareAndSwapUintptr(ptr *uintptr, old, new uintptr) bool