Commit | Line | Data |
---|---|---|
6ae8f908 MS |
1 | #!./perl |
2 | ||
3 | BEGIN { | |
4 | chdir 't'; | |
5 | @INC = '../lib'; | |
6 | require './test.pl'; | |
7 | } | |
8 | ||
9 | BEGIN { | |
10 | use Config; | |
11 | if( !$Config{d_alarm} ) { | |
12 | skip_all("alarm() not implemented on this platform"); | |
13 | } | |
14 | } | |
15 | ||
75af1a9c | 16 | plan tests => 5; |
6ae8f908 MS |
17 | my $Perl = which_perl(); |
18 | ||
19 | my $start_time = time; | |
20 | eval { | |
21 | local $SIG{ALRM} = sub { die "ALARM!\n" }; | |
22 | alarm 3; | |
23 | ||
24 | # perlfunc recommends against using sleep in combination with alarm. | |
25 | 1 while (time - $start_time < 6); | |
26 | }; | |
27 | alarm 0; | |
28 | my $diff = time - $start_time; | |
29 | ||
30 | # alarm time might be one second less than you said. | |
31 | is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs inf loop' ); | |
dfcfdb64 | 32 | ok( abs($diff - 3) <= 1, " right time" ); |
6ae8f908 MS |
33 | |
34 | ||
35 | my $start_time = time; | |
36 | eval { | |
37 | local $SIG{ALRM} = sub { die "ALARM!\n" }; | |
38 | alarm 3; | |
39 | system(qq{$Perl -e "sleep 6"}); | |
40 | }; | |
41 | alarm 0; | |
42 | $diff = time - $start_time; | |
43 | ||
44 | # alarm time might be one second less than you said. | |
45 | is( $@, "ALARM!\n", 'alarm w/$SIG{ALRM} vs system()' ); | |
46 | ||
6ffa69ae | 47 | { |
ee1db23e | 48 | local $TODO = "Why does system() block alarm() on $^O?" |
afdf87ad | 49 | if $^O eq 'VMS' || $^O eq'MacOS' || $^O eq 'dos'; |
6ffa69ae CB |
50 | ok( abs($diff - 3) <= 1, " right time (waited $diff secs for 3-sec alarm)" ); |
51 | } | |
75af1a9c DM |
52 | |
53 | ||
54 | { | |
55 | local $SIG{"ALRM"} = sub { die }; | |
28849697 | 56 | eval { alarm(1); my $x = qx($Perl -e "sleep 3") }; |
75af1a9c DM |
57 | chomp (my $foo = "foo\n"); |
58 | ok($foo eq "foo", '[perl #33928] chomp() fails after alarm(), `sleep`'); | |
59 | } |