github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/net/internal/socket/race.go (about) 1 // Copyright 2019 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build race 6 // +build race 7 8 package socket 9 10 import ( 11 "runtime" 12 "unsafe" 13 ) 14 15 // This package reads and writes the Message buffers using a 16 // direct system call, which the race detector can't see. 17 // These functions tell the race detector what is going on during the syscall. 18 19 func (m *Message) raceRead() { 20 for _, b := range m.Buffers { 21 if len(b) > 0 { 22 runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) 23 } 24 } 25 if b := m.OOB; len(b) > 0 { 26 runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) 27 } 28 } 29 func (m *Message) raceWrite() { 30 for _, b := range m.Buffers { 31 if len(b) > 0 { 32 runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) 33 } 34 } 35 if b := m.OOB; len(b) > 0 { 36 runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) 37 } 38 }