Home | History | Annotate | Download | only in test
      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 #include <signal.h>
      8 #include <stdlib.h>
      9 #include <pthread.h>
     10 #include <stdio.h>
     11 #include <unistd.h>
     12 
     13 extern void IntoGoAndBack();
     14 
     15 int CheckBlocked() {
     16 	sigset_t mask;
     17 	sigprocmask(SIG_BLOCK, NULL, &mask);
     18 	return sigismember(&mask, SIGIO);
     19 }
     20 
     21 static void* sigthreadfunc(void* unused) {
     22 	sigset_t mask;
     23 	sigemptyset(&mask);
     24 	sigaddset(&mask, SIGIO);
     25 	sigprocmask(SIG_BLOCK, &mask, NULL);
     26 	IntoGoAndBack();
     27 	return NULL;
     28 }
     29 
     30 int RunSigThread() {
     31 	pthread_t thread;
     32 	int r;
     33 
     34 	r = pthread_create(&thread, NULL, &sigthreadfunc, NULL);
     35 	if (r != 0)
     36 		return r;
     37 	return pthread_join(thread, NULL);
     38 }
     39