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.
5 //go:build linux && freebsd && openbsd
11 #include <sys/syscall.h>
13 static int Ctid(void) { Gosched(); return syscall(SYS_gettid); }
30 testThreadLockFunc = testThreadLock
33 func testThreadLock(t *testing.T) {
34 stop := make(chan int)
36 // We need the G continue running,
37 // so the M has a chance to run this G.
42 case <-time.After(time.Millisecond * 100):
48 for i := 0; i < 1000; i++ {
49 if C.int(syscall.Gettid()) != C.Ctid() {
50 t.Fatalf("cgo has not locked OS thread")