mirror of
https://github.com/golang/go
synced 2024-11-26 13:28:27 -07:00
30d7e6449f
For unknown reasons, linking against CoreFoundation on macOS 10.10 sometimes causes mmap to ignore the hint address, which makes the Go allocator incompatible with TSAN. Currently, the effect of this is to run the allocator out of arena hints on the very first allocation, causing a "too many address space collisions for -race mode" panic. This CL skips the cgo tests that link against CoreFoundation in race mode. Updates #26475. Updates #26513. Change-Id: I52ec638c99acf5d4966e68ff0054f7679680dac6 Reviewed-on: https://go-review.googlesource.com/125304 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
// Copyright 2017 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.
|
|
|
|
// We skip this test in race mode because, for unknown reasons,
|
|
// linking against CoreFoundation on macOS 10.10 causes mmap to ignore
|
|
// the hint address, which makes the Go allocator incompatible with
|
|
// TSAN. See golang.org/issue/26475.
|
|
//
|
|
// TODO(austin): Once support for macOS 10.10 is dropped, remove the
|
|
// race constraint (and the one in issue21897b.go). See
|
|
// golang.org/issue/26513.
|
|
|
|
// +build darwin,cgo,!internal,!race
|
|
|
|
package cgotest
|
|
|
|
/*
|
|
#cgo LDFLAGS: -framework CoreFoundation
|
|
#include <CoreFoundation/CoreFoundation.h>
|
|
*/
|
|
import "C"
|
|
import (
|
|
"runtime/debug"
|
|
"testing"
|
|
"unsafe"
|
|
)
|
|
|
|
func test21897(t *testing.T) {
|
|
// Please write barrier, kick in soon.
|
|
defer debug.SetGCPercent(debug.SetGCPercent(1))
|
|
|
|
for i := 0; i < 10000; i++ {
|
|
testCFNumberRef()
|
|
testCFDateRef()
|
|
testCFBooleanRef()
|
|
// Allocate some memory, so eventually the write barrier is enabled
|
|
// and it will see writes of bad pointers in the test* functions below.
|
|
byteSliceSink = make([]byte, 1024)
|
|
}
|
|
}
|
|
|
|
var byteSliceSink []byte
|
|
|
|
func testCFNumberRef() {
|
|
var v int64 = 0
|
|
xCFNumberRef = C.CFNumberCreate(C.kCFAllocatorSystemDefault, C.kCFNumberSInt64Type, unsafe.Pointer(&v))
|
|
//fmt.Printf("CFNumberRef: %x\n", uintptr(unsafe.Pointer(xCFNumberRef)))
|
|
}
|
|
|
|
var xCFNumberRef C.CFNumberRef
|
|
|
|
func testCFDateRef() {
|
|
xCFDateRef = C.CFDateCreate(C.kCFAllocatorSystemDefault, 0) // 0 value is 1 Jan 2001 00:00:00 GMT
|
|
//fmt.Printf("CFDateRef: %x\n", uintptr(unsafe.Pointer(xCFDateRef)))
|
|
}
|
|
|
|
var xCFDateRef C.CFDateRef
|
|
|
|
func testCFBooleanRef() {
|
|
xCFBooleanRef = C.kCFBooleanFalse
|
|
//fmt.Printf("CFBooleanRef: %x\n", uintptr(unsafe.Pointer(xCFBooleanRef)))
|
|
}
|
|
|
|
var xCFBooleanRef C.CFBooleanRef
|