// Copyright 2016 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. | |
package main | |
// Check that calls to C.malloc/C.free do not trigger TSAN false | |
// positive reports. | |
// #cgo CFLAGS: -fsanitize=thread | |
// #cgo LDFLAGS: -fsanitize=thread | |
// #include <stdlib.h> | |
import "C" | |
import ( | |
"runtime" | |
"sync" | |
) | |
func main() { | |
var wg sync.WaitGroup | |
for i := 0; i < 10; i++ { | |
wg.Add(1) | |
go func() { | |
defer wg.Done() | |
for i := 0; i < 100; i++ { | |
p := C.malloc(C.size_t(i * 10)) | |
runtime.Gosched() | |
C.free(p) | |
} | |
}() | |
} | |
wg.Wait() | |
} |