| // Copyright 2016 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. |
| // +build linux,freebsd,openbsd |
| static int Ctid(void) { Gosched(); return syscall(SYS_gettid); } |
| testThreadLockFunc = testThreadLock |
| func testThreadLock(t *testing.T) { |
| // We need the G continue running, |
| // so the M has a chance to run this G. |
| case <-time.After(time.Millisecond * 100): |
| for i := 0; i < 1000; i++ { |
| if C.int(syscall.Gettid()) != C.Ctid() { |
| t.Fatalf("cgo has not locked OS thread") |