Skip to content

Commit

Permalink
Write tests for RT #77934.
Browse files Browse the repository at this point in the history
Assistance with test provided by Jerry Hedden.
  • Loading branch information
jkeenan committed Jan 13, 2017
1 parent 3626fc2 commit afa4768
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 0 deletions.
1 change: 1 addition & 0 deletions MANIFEST
Original file line number Diff line number Diff line change
Expand Up @@ -3689,6 +3689,7 @@ dist/threads/t/free2.t More ithread destruction tests
dist/threads/t/join.t Testing the join function
dist/threads/t/kill.t Tests thread signalling
dist/threads/t/kill2.t Tests thread signalling
dist/threads/t/kill3.t Tests thread signalling
dist/threads/t/libc.t testing libc functions for threadsafety
dist/threads/t/list.t Test threads->list()
dist/threads/t/no_threads.t threads test for non-threaded Perls
Expand Down
113 changes: 113 additions & 0 deletions dist/threads/t/kill3.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
use strict;
use warnings;

BEGIN {
require($ENV{PERL_CORE} ? '../../t/test.pl' : './t/test.pl');

use Config;
if (! $Config{'useithreads'}) {
skip_all(q/Perl not compiled with 'useithreads'/);
}
}

use ExtUtils::testlib;
use Cwd;
my $cwd = cwd();

use threads;

BEGIN {
if (! eval 'use threads::shared; 1') {
skip_all('threads::shared not available');
}

local $SIG{'HUP'} = sub {};
my $thr = threads->create(sub {});
eval { $thr->kill('HUP') };
$thr->join();
if ($@ && $@ =~ /safe signals/) {
skip_all('Not using safe signals');
}

plan(2);
};

{
$SIG{'KILL'} = undef;
chdir '/tmp';
mkdir "toberead$$";
chdir "toberead$$";
for ('a'..'e') {
open my $THING, ">$_";
close $THING or die "$_: $!";
}
chdir $cwd;

local $ARGV[0] = undef;
fresh_perl_is(<<'EOI', 'ok', { }, 'RT #77934: Case: Perl-false $ARGV[0]');
local $@;
my $DIRH;
my $thr;
$thr = async {
# Thread 'cancellation' signal handler
$SIG{'KILL'} = sub { threads->exit(); };
opendir $DIRH, ".";
my $start = telldir $DIRH;
while (1) {
readdir $DIRH or seekdir $DIRH, 0;
}
} if $ARGV[0];
opendir $DIRH, ".";
for(1..5) {
select undef, undef, undef, .25;
}
if ($ARGV[0]) {
$thr->kill('KILL')->detach();
}
print($@ ? 'not ok' : 'ok');
EOI
}

{
$SIG{'KILL'} = undef;
chdir '/tmp';
mkdir "shouldberead$$";
chdir "shouldberead$$";
for ('a'..'e') {
open my $THING, ">$_";
close $THING or die "$_: $!";
}
chdir $cwd;

local $ARGV[0] = 1;
fresh_perl_is(<<'EOI', 'ok', { }, 'RT #77934: Case: Perl-true $ARGV[0]');
local $@;
my $DIRH;
my $thr;
$thr = async {
# Thread 'cancellation' signal handler
$SIG{'KILL'} = sub { threads->exit(); };
opendir $DIRH, ".";
my $start = telldir $DIRH;
while (1) {
readdir $DIRH or seekdir $DIRH, 0;
}
} if $ARGV[0];
opendir $DIRH, ".";
for(1..5) {
select undef, undef, undef, .25;
}
if ($ARGV[0]) {
$thr->kill('KILL')->detach();
}
print($@ ? 'not ok' : 'ok');
EOI
}

exit(0);

0 comments on commit afa4768

Please sign in to comment.