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_sigpending.c pth_atfork1.c
+ pth_pause.c pth_sigpending.c pth_atfork1.c \
+ fpu_28_108.S pth_blockedsig.c
--- /dev/null
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdio.h>
+#include <signal.h>
+#include <pthread.h>
+
+static void sig_usr1(int);
+
+static pthread_t main_thread;
+
+void *
+child_main(void *no_args)
+{
+ int i;
+
+ for (i = 0; i < 5; ++i)
+ {
+ sleep (1);
+ fprintf (stdout, "thread %ld sending SIGUSR1 to thread %ld\n",
+ pthread_self (), main_thread);
+ if (pthread_kill (main_thread, SIGUSR1) != 0)
+ fprintf (stderr, "error doing pthread_kill\n");
+ }
+
+ return no_args;
+}
+
+int
+main(void)
+{
+ struct sigaction sigact;
+ sigset_t newmask, oldmask;
+ pthread_t child;
+
+ memset(&newmask, 0, sizeof newmask);
+ sigemptyset (&newmask);
+ sigaddset (&newmask, SIGUSR1);
+
+ if (pthread_sigmask (SIG_BLOCK, &newmask, &oldmask) != 0)
+ fprintf (stderr, "SIG_BLOCK error");
+
+ memset (&sigact, 0, sizeof sigact);
+ sigact.sa_handler = sig_usr1;
+ if (sigaction(SIGUSR1, &sigact, NULL) != 0)
+ fprintf (stderr, "signal(SIGINT) error");
+
+ main_thread = pthread_self ();
+ if (pthread_create (&child, NULL, child_main, NULL) != 0)
+ fprintf (stderr, "error creating thread");
+
+ pthread_join (child, NULL);
+
+ exit(0);
+}
+
+static void
+sig_usr1 (int signo)
+{
+ fprintf (stderr, "SHOULD NOT BE HERE (SIGUSR1)!!!!\n");
+ return;
+}