// 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. | |
#include <signal.h> | |
#include <stdlib.h> | |
#include <pthread.h> | |
#include <stdio.h> | |
#include <unistd.h> | |
extern void IntoGoAndBack(); | |
int CheckBlocked() { | |
sigset_t mask; | |
sigprocmask(SIG_BLOCK, NULL, &mask); | |
return sigismember(&mask, SIGIO); | |
} | |
static void* sigthreadfunc(void* unused) { | |
sigset_t mask; | |
sigemptyset(&mask); | |
sigaddset(&mask, SIGIO); | |
sigprocmask(SIG_BLOCK, &mask, NULL); | |
IntoGoAndBack(); | |
return NULL; | |
} | |
int RunSigThread() { | |
pthread_t thread; | |
int r; | |
r = pthread_create(&thread, NULL, &sigthreadfunc, NULL); | |
if (r != 0) | |
return r; | |
return pthread_join(thread, NULL); | |
} |