]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add test case for sigpending().
authorJulian Seward <jseward@acm.org>
Thu, 20 Jun 2002 08:17:07 +0000 (08:17 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 20 Jun 2002 08:17:07 +0000 (08:17 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@452

tests/Makefile.am
tests/pth_sigpending.c [new file with mode: 0644]

index 8eadc56c607dfcffdbb6551013f36f3d723905a5..ac0400b2ed4010f44efb47495d720c2d7648b88b 100644 (file)
@@ -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 (file)
index 0000000..05bdbb0
--- /dev/null
@@ -0,0 +1,55 @@
+
+#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;
+}