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