| // 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. | 
 |  | 
 | //go:build !windows | 
 | // +build !windows | 
 |  | 
 | package cgotest | 
 |  | 
 | /* | 
 | #cgo CFLAGS: -pthread | 
 | #cgo LDFLAGS: -pthread | 
 | extern int RunSigThread(); | 
 | extern int CheckBlocked(); | 
 | */ | 
 | import "C" | 
 | import ( | 
 | 	"os" | 
 | 	"os/signal" | 
 | 	"syscall" | 
 | 	"testing" | 
 | ) | 
 |  | 
 | var blocked bool | 
 |  | 
 | //export IntoGoAndBack | 
 | func IntoGoAndBack() { | 
 | 	// Verify that SIGIO stays blocked on the C thread | 
 | 	// even when unblocked for signal.Notify(). | 
 | 	signal.Notify(make(chan os.Signal), syscall.SIGIO) | 
 | 	blocked = C.CheckBlocked() != 0 | 
 | } | 
 |  | 
 | func testSigprocmask(t *testing.T) { | 
 | 	if r := C.RunSigThread(); r != 0 { | 
 | 		t.Errorf("pthread_create/pthread_join failed: %d", r) | 
 | 	} | 
 | 	if !blocked { | 
 | 		t.Error("Go runtime unblocked SIGIO") | 
 | 	} | 
 | } |