blob: 05bdbb014b2ce4f7287985c5c3dda70522be2a9c [file] [log] [blame]
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <errno.h>
#include <assert.h>
int show ( void )
{
int res, i, ret;
sigset_t pend;
res = sigpending(&pend);
printf("pending signals:\n");
assert(res == 0);
ret = 0;
for (i = 1; i < 64; i++) {
if (sigismember(&pend,i)) {
printf(" sig %d now pending\n", i);
ret = 1;
}
}
return ret;
}
void hdlr ( int sig )
{
printf("signal %d arrived (unexpectedly!)\n", sig);
}
int main ( void )
{
int res;
sigset_t set;
/* Force use of libpthread here */
pthread_testcancel();
printf("installing handler\n");
signal(SIGINT, hdlr);
/* and block it ... */
sigemptyset(&set);
sigaddset(&set, SIGINT);
res = pthread_sigmask(SIG_BLOCK, &set, NULL);
assert(res == 0);
printf("installing handler done; please do Control-C\n");
while (1) {
res = show();
if (res) break;
sleep(1);
}
printf("control-C now pending -- bye\n");
return 0;
}