Source file
src/runtime/race/race_unix_test.go
1
2
3
4
5
6
7
8
9 package race_test
10
11 import (
12 "sync/atomic"
13 "syscall"
14 "testing"
15 "unsafe"
16 )
17
18
19 func TestNonGoMemory(t *testing.T) {
20 data, err := syscall.Mmap(-1, 0, 4096, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_ANON|syscall.MAP_PRIVATE)
21 if err != nil {
22 t.Fatalf("failed to mmap memory: %v", err)
23 }
24 p := (*uint32)(unsafe.Pointer(&data[0]))
25 atomic.AddUint32(p, 1)
26 (*p)++
27 if *p != 2 {
28 t.Fatalf("data[0] = %v, expect 2", *p)
29 }
30 syscall.Munmap(data)
31 }
32
View as plain text