lab.nexedi.com/kirr/go123@v0.0.0-20240207185015-8299741fa871/tracing/internal/race/race.go (about)

     1  // Copyright (C) 2017  Nexedi SA and Contributors.
     2  //                     Kirill Smelkov <kirr@nexedi.com>
     3  //
     4  // This program is free software: you can Use, Study, Modify and Redistribute
     5  // it under the terms of the GNU General Public License version 3, or (at your
     6  // option) any later version, as published by the Free Software Foundation.
     7  //
     8  // You can also Link and Combine this program with other software covered by
     9  // the terms of any of the Free Software licenses or any of the Open Source
    10  // Initiative approved licenses and Convey the resulting work. Corresponding
    11  // source of such a combination shall include the source code for all other
    12  // software used.
    13  //
    14  // This program is distributed WITHOUT ANY WARRANTY; without even the implied
    15  // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    16  //
    17  // See COPYING file for full licensing terms.
    18  // See https://www.nexedi.com/licensing for rationale and options.
    19  
    20  //go:build race
    21  // +build race
    22  
    23  package race
    24  
    25  import "unsafe"
    26  
    27  /*
    28  // symbols are e.g. in go/src/runtime/race/race_linux_amd64.syso
    29  #cgo LDFLAGS: -Wl,--unresolved-symbols=ignore-in-object-files
    30  
    31  // __tsan::ThreadIgnoreBegin(__tsan::ThreadState*, unsigned long)
    32  // __tsan::ThreadIgnoreEnd(__tsan::ThreadState*, unsigned long)
    33  extern void _ZN6__tsan17ThreadIgnoreBeginEPNS_11ThreadStateEm(void *, unsigned long);
    34  extern void _ZN6__tsan15ThreadIgnoreEndEPNS_11ThreadStateEm(void *, unsigned long);
    35  */
    36  import "C"
    37  
    38  // Ways to tell race-detector to ignore "read/write" events from current thread.
    39  // NOTE runtime.RaceDisable disables only "sync" part, not "read/write".
    40  
    41  func IgnoreBegin(racectx uintptr) {
    42  	C._ZN6__tsan17ThreadIgnoreBeginEPNS_11ThreadStateEm(unsafe.Pointer(racectx), 0)
    43  }
    44  
    45  func IgnoreEnd(racectx uintptr) {
    46  	C._ZN6__tsan15ThreadIgnoreEndEPNS_11ThreadStateEm(unsafe.Pointer(racectx), 0)
    47  }