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 }