• Ian Lance Taylor's avatar
    runtime/cgo: add TSAN acquire/release calls · 66736880
    Ian Lance Taylor authored
    Add TSAN acquire/release calls to runtime/cgo to match the ones
    generated by cgo.  This avoids a false positive race around the malloc
    memory used in runtime/cgo when other goroutines are simultaneously
    calling malloc and free from cgo.
    
    These new calls will only be used when building with CGO_CFLAGS and
    CGO_LDFLAGS set to -fsanitize=thread, which becomes a requirement to
    avoid all false positives when using TSAN.  These are needed not just
    for runtime/cgo, but also for any runtime package that uses cgo (such as
    net and os/user).
    
    Add an unused attribute to the _cgo_tsan_acquire and _cgo_tsan_release
    functions, in case there are no actual cgo function calls.
    
    Add a test that checks that setting CGO_CFLAGS/CGO_LDFLAGS avoids a
    false positive report when using os/user.
    
    Change-Id: I0905c644ff7f003b6718aac782393fa219514c48
    Reviewed-on: https://go-review.googlesource.com/23492
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarDmitry Vyukov <dvyukov@google.com>
    66736880
tsan5.go 927 Bytes