github.com/kidsbmilk/gofronted_all@v0.0.0-20220701224323-6479d5976c5d/libgo/misc/cgo/testsanitizers/testdata/tsan4.go (about)

     1  // Copyright 2016 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  package main
     6  
     7  // Check that calls to C.malloc/C.free do not trigger TSAN false
     8  // positive reports.
     9  
    10  // #cgo CFLAGS: -fsanitize=thread
    11  // #cgo LDFLAGS: -fsanitize=thread
    12  // #include <stdlib.h>
    13  import "C"
    14  
    15  import (
    16  	"runtime"
    17  	"sync"
    18  )
    19  
    20  func main() {
    21  	var wg sync.WaitGroup
    22  	for i := 0; i < 10; i++ {
    23  		wg.Add(1)
    24  		go func() {
    25  			defer wg.Done()
    26  			for i := 0; i < 100; i++ {
    27  				p := C.malloc(C.size_t(i * 10))
    28  				runtime.Gosched()
    29  				C.free(p)
    30  			}
    31  		}()
    32  	}
    33  	wg.Wait()
    34  }