| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build race |
| // +build race |
| |
| package socket |
| |
| import ( |
| "runtime" |
| "unsafe" |
| ) |
| |
| // This package reads and writes the Message buffers using a |
| // direct system call, which the race detector can't see. |
| // These functions tell the race detector what is going on during the syscall. |
| |
| func (m *Message) raceRead() { |
| for _, b := range m.Buffers { |
| if len(b) > 0 { |
| runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) |
| } |
| } |
| if b := m.OOB; len(b) > 0 { |
| runtime.RaceReadRange(unsafe.Pointer(&b[0]), len(b)) |
| } |
| } |
| func (m *Message) raceWrite() { |
| for _, b := range m.Buffers { |
| if len(b) > 0 { |
| runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) |
| } |
| } |
| if b := m.OOB; len(b) > 0 { |
| runtime.RaceWriteRange(unsafe.Pointer(&b[0]), len(b)) |
| } |
| } |