github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/misc/cgo/test/sigprocmask.go (about) 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 // +build !windows 6 7 package cgotest 8 9 /* 10 #cgo CFLAGS: -pthread 11 #cgo LDFLAGS: -pthread 12 extern int RunSigThread(); 13 extern int CheckBlocked(); 14 */ 15 import "C" 16 import ( 17 "os" 18 "os/signal" 19 "syscall" 20 "testing" 21 ) 22 23 var blocked bool 24 25 //export IntoGoAndBack 26 func IntoGoAndBack() { 27 // Verify that SIGIO stays blocked on the C thread 28 // even when unblocked for signal.Notify(). 29 signal.Notify(make(chan os.Signal), syscall.SIGIO) 30 blocked = C.CheckBlocked() != 0 31 } 32 33 func testSigprocmask(t *testing.T) { 34 if r := C.RunSigThread(); r != 0 { 35 t.Error("pthread_create/pthread_join failed") 36 } 37 if !blocked { 38 t.Error("Go runtime unblocked SIGIO") 39 } 40 }