github.com/hlts2/go@v0.0.0-20170904000733-812b34efaed8/src/runtime/race/race_unix_test.go (about) 1 // Copyright 2014 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 // +build race 6 // +build darwin freebsd linux 7 8 package race_test 9 10 import ( 11 "sync/atomic" 12 "syscall" 13 "testing" 14 "unsafe" 15 ) 16 17 // Test that race detector does not crash when accessing non-Go allocated memory (issue 9136). 18 func TestNonGoMemory(t *testing.T) { 19 data, err := syscall.Mmap(-1, 0, 4096, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_ANON|syscall.MAP_PRIVATE) 20 if err != nil { 21 t.Fatalf("failed to mmap memory: %v", err) 22 } 23 p := (*uint32)(unsafe.Pointer(&data[0])) 24 atomic.AddUint32(p, 1) 25 (*p)++ 26 if *p != 2 { 27 t.Fatalf("data[0] = %v, expect 2", *p) 28 } 29 syscall.Munmap(data) 30 }