1// Copyright 2015 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// The file contains tests that cannot run under race detector for some reason. 6// 7//go:build !race 8 9package runtime_test 10 11import ( 12 "internal/abi" 13 "runtime" 14 "testing" 15 "time" 16 "unsafe" 17) 18 19var newOSProcDone bool 20 21//go:nosplit 22func newOSProcCreated() { 23 newOSProcDone = true 24} 25 26// Can't be run with -race because it inserts calls into newOSProcCreated() 27// that require a valid G/M. 28func TestNewOSProc0(t *testing.T) { 29 runtime.NewOSProc0(0x800000, unsafe.Pointer(abi.FuncPCABIInternal(newOSProcCreated))) 30 check := time.NewTicker(100 * time.Millisecond) 31 defer check.Stop() 32 end := time.After(5 * time.Second) 33 for { 34 select { 35 case <-check.C: 36 if newOSProcDone { 37 return 38 } 39 case <-end: 40 t.Fatalf("couldn't create new OS process") 41 } 42 } 43} 44