&& sig != VKI_SIGKILL && sig != VKI_SIGSTOP)
VG_(ksigaddset)( &dst->skss_sigmask, sig );
- dst->skss_per_sig[sig].skss_handler = skss_handler;
+ if (sig != VKI_SIGKILL && sig != VKI_SIGSTOP)
+ dst->skss_per_sig[sig].skss_handler = skss_handler;
+ else
+ dst->skss_per_sig[sig].skss_handler = VKI_SIG_DFL;
+
dst->skss_per_sig[sig].skss_flags = skss_flags;
}
pth_threadpool.c pth_specific.c pth_mutexspeed.c malloc3.c \
pth_once.c weirdioctl.c pth_signal1.c pth_signal2.c \
discard.c pth_semaphore1.c new_override.cpp pth_yield.c \
- sigaltstack.c erringfds.c
+ sigaltstack.c erringfds.c sigwait_all.c
--- /dev/null
+
+#include <stdio.h>
+#include <pthread.h>
+#include <signal.h>
+
+
+int main ( void )
+{
+ int res, sig;
+ sigset_t set;
+ sigfillset(&set);
+
+ /* block all signals */
+ pthread_sigmask(SIG_BLOCK, &set, NULL);
+
+ printf("send me a signal, any signal\n");
+
+ /* Wait for any signal in the set */
+ res = sigwait(&set, &sig);
+
+ printf("sigwait returned, res = %d, sig = %d\n", res, sig);
+ return 0;
+}
&& sig != VKI_SIGKILL && sig != VKI_SIGSTOP)
VG_(ksigaddset)( &dst->skss_sigmask, sig );
- dst->skss_per_sig[sig].skss_handler = skss_handler;
+ if (sig != VKI_SIGKILL && sig != VKI_SIGSTOP)
+ dst->skss_per_sig[sig].skss_handler = skss_handler;
+ else
+ dst->skss_per_sig[sig].skss_handler = VKI_SIG_DFL;
+
dst->skss_per_sig[sig].skss_flags = skss_flags;
}