From: Julian Seward Date: Thu, 23 May 2002 17:09:43 +0000 (+0000) Subject: Fix small bug causing assertion failure in computation of SKSS. X-Git-Tag: svn/VALGRIND_1_0_3~150 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e61a13b92a4a139ea59a81abbabab54e499c6140;p=thirdparty%2Fvalgrind.git Fix small bug causing assertion failure in computation of SKSS. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@316 --- diff --git a/coregrind/vg_signals.c b/coregrind/vg_signals.c index 1b4c98128c..6532b286d1 100644 --- a/coregrind/vg_signals.c +++ b/coregrind/vg_signals.c @@ -312,7 +312,11 @@ void calculate_SKSS_from_SCSS ( SKSS* dst ) && 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; } diff --git a/tests/Makefile.am b/tests/Makefile.am index 14e6f25a4a..21a8d20a81 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -29,4 +29,4 @@ EXTRA_DIST = \ 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 diff --git a/tests/sigwait_all.c b/tests/sigwait_all.c new file mode 100644 index 0000000000..27a5be7210 --- /dev/null +++ b/tests/sigwait_all.c @@ -0,0 +1,23 @@ + +#include +#include +#include + + +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; +} diff --git a/vg_signals.c b/vg_signals.c index 1b4c98128c..6532b286d1 100644 --- a/vg_signals.c +++ b/vg_signals.c @@ -312,7 +312,11 @@ void calculate_SKSS_from_SCSS ( SKSS* dst ) && 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; }