Restore errno if signal handler changes it
[perl.git] / t / io / errnosig.t
1 #!./perl
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = qw(. ../lib);
6 }
7
8 require Config; import Config;
9 require "test.pl";
10 plan(tests => 1);
11
12 SKIP: {
13     skip("Alarm not supported", 1) unless exists $Config{'d_alarm'};
14
15     $SIG{ALRM} = sub {
16         # We could call anything that modifies $! here, but
17         # this way we can be sure that it isn't the same
18         # errno as interrupted sleep() would return, and are
19         # able to check it thereafter.
20         $! = -1;
21     };
22
23     alarm 1;
24     sleep 2;
25
26     # Interrupted sleeps sets errno to EAGAIN, but signal
27     # that # hits after it (if safe signal handling is enabled)
28     # causes a routing that modifies $! to be run afterwards
29     isnt($! + 0, -1, 'Signal does not modify $!');
30 }