Also, (1) http://perldoc.perl.org/perlipc.html#Deferred-Signals-%28Safe-Signals%29 > the solution is to use the :perlio layer to do IO--at least on those handles that you want to be able to break into with signals. http://perldoc.perl.org/PerlIO.html > The default can be overridden by setting the environment variable PERLIO to a space separated list of layers it seems that the test initially had binmode $fh, ":perlio"; but PERLIO=stdio overrides this. so phrase "The default can be overridden by setting the environment variable PERLIO" does not look correct. Not only default is overriden, but any atempt to use the layer. (2) There is a ticket related to eintr.t https://rt.perl.org/rt3/Ticket/Display.html?id=85842 Long story short (my understanding): 1. Commit http://perl5.git.perl.org/perl.git/commit/b83080de5c4254 introduce eintr.t problems under freebsd and some solaris versions 2. Those OS blacklisted in eintr.t 3. It still has problems on older linuxes 4. According to this comment https://rt.perl.org/rt3/Ticket/Display.html?id=84688#txn-871204 any (or some) IO in signal handler can be a problem, however it should not (according to perlipc) So, according to this ticket it might be a good idea to: a) copy OS blacklist from eintr.t to eintr_print.t b) remove 'print "# ALRM $$\n"' from $SIG{ALRM} On Sun Aug 11 02:41:44 2013, vsespb wrote: > Seems it hangs (in 100% of cases) when PERLIO=stdio > > can be fixed with > > skip_all("not supposed to work with stdio") > if (exists $ENV{PERLIO} && $ENV{PERLIO} =~ /stdio/ ); > > similar code exits in eintr.t: > > # XXX for some reason the stdio layer doesn't seem to interrupt > # write system call when the alarm triggers. This makes the tests > # hang. > > if (exists $ENV{PERLIO} && $ENV{PERLIO} =~ /stdio/ ) { > skip_all('stdio not supported for this script'); > exit 0; > } > > > > On Sun Aug 11 01:19:12 2013, vsespb wrote: > > hm, that's sad :( i've tested it for stability like this on Linux x86-64 > > and OpenBSD: > > > > ( seq 10000 |xargs -P 100 -n 1 ./perl t/io/eintr_print.t ) && echo > ALL_FINE > > > > (i.e. 100 concurrent runs) and it was fine. > > > > On Sat Aug 10 17:02:36 2013, tonyc wrote: > > > On Sat Aug 10 15:51:13 2013, tonyc wrote: > > > > This test has blocked one of my darwin smokers, but doesn't appear to > > > > block every time: > > > > > > It also blocked on Linux amd64, Solaris 11, NetBSD 5.1.2. > > > > > > Tony > > > > > > --- via perlbug: queue: perl5 status: open https://rt.perl.org:443/rt3/Ticket/Display.html?id=119097Thread Previous | Thread Next