Added tests for conditional unblocking
authorLeon Timmermans <fawaka@gmail.com>
Mon, 17 Jan 2011 15:29:11 +0000 (16:29 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 18 Jan 2011 06:31:27 +0000 (22:31 -0800)
t/op/sigdispatch.t

index 5d9908e..a86861e 100644 (file)
@@ -7,8 +7,9 @@ BEGIN {
 }
 
 use strict;
+use Config;
 
-plan tests => 4;
+plan tests => 9;
 
 watchdog(10);
 
@@ -36,3 +37,26 @@ eval {
 };
 
 is($@, "Alarm!\n", 'after the second loop');
+
+SKIP: {
+    skip('We can\'t test blocking without sigprocmask', 3) if $ENV{PERL_CORE_MINITEST} || !$Config{d_sigprocmask};
+
+    require POSIX;
+    my $new = POSIX::SigSet->new(&POSIX::SIGUSR1);
+    POSIX::sigprocmask(&POSIX::SIG_BLOCK, $new);
+    
+    my $gotit = 0;
+    $SIG{USR1} = sub { $gotit++ };
+    kill SIGUSR1, $$;
+    is $gotit, 0, 'Haven\'t third received signal yet';
+    
+    my $old = POSIX::SigSet->new();
+    POSIX::sigsuspend($old);
+    is $gotit, 1, 'Received third signal';
+    
+    kill SIGUSR1, $$;
+    is $gotit, 1, 'Haven\'t fourth received signal yet';
+    POSIX::sigprocmask(&POSIX::SIG_UNBLOCK, $new, $old);
+    ok $old->ismember(&POSIX::SIGUSR1), 'SIGUSR1 was still blocked';
+    is $gotit, 2, 'Received fourth signal';
+}