From: Julian Seward Date: Thu, 20 Jun 2002 08:17:07 +0000 (+0000) Subject: Add test case for sigpending(). X-Git-Tag: svn/VALGRIND_1_0_3~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=314f516b099e4879a3fedd04cf817ff9910d3b93;p=thirdparty%2Fvalgrind.git Add test case for sigpending(). git-svn-id: svn://svn.valgrind.org/valgrind/trunk@452 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 8eadc56c60..ac0400b2ed 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -31,4 +31,4 @@ EXTRA_DIST = \ discard.c pth_semaphore1.c new_override.cpp pth_yield.c \ sigaltstack.c erringfds.c sigwait_all.c \ pth_cancel1.c pth_cancel2.c pth_signal_gober.c nanoleak.c \ - pth_pause.c + pth_pause.c pth_sigpending.c diff --git a/tests/pth_sigpending.c b/tests/pth_sigpending.c new file mode 100644 index 0000000000..05bdbb014b --- /dev/null +++ b/tests/pth_sigpending.c @@ -0,0 +1,55 @@ + +#include +#include +#include +#include +#include +#include + +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; +}