Created
May 19, 2011 02:42
-
-
Save hinrik/980079 to your computer and use it in GitHub Desktop.
SIGCHLD sometimes not delivered. Race condition?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use strict; | |
use warnings FATAL => 'all'; | |
use POE; | |
use POE::Quickie; | |
use Test::More tests => 5; | |
POE::Session->create( | |
package_states => [ | |
(__PACKAGE__) => [qw( | |
_start | |
stdout | |
stderr | |
)], | |
], | |
); | |
POE::Kernel->run; | |
sub _start { | |
my $heap = $_[HEAP]; | |
my $quickie = POE::Quickie->new(trace => 1); | |
$quickie->run( | |
Program => sub { print "foo\n" }, | |
StdoutEvent => 'stdout', | |
Context => 'baz', | |
); | |
} | |
sub stdout { | |
my ($heap, $output, $pid, $context) = @_[HEAP, ARG0..ARG2]; | |
is($output, 'foo', 'Got stdout'); | |
is($context, 'baz', 'Got context'); | |
my $procs = POE::Quickie->processes(); | |
is($procs->{$pid}, 'baz', '$quickie->processes() works'); | |
POE::Quickie->run( | |
Program => sub { warn "bar\n" }, | |
StderrEvent => 'stderr', | |
Context => 'quux', | |
); | |
} | |
sub stderr { | |
my ($heap, $error, $context) = @_[HEAP, ARG0, ARG2]; | |
is($error, 'bar', 'Got stderr'); | |
is($context, 'quux', 'Got context'); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ for i in {1..1000}; do prove -vl 02_success.t; done | |
t/02_success.t .. | |
1..5 | |
=== 15671 === 2 -> _start (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Kernel.pm at 1413) | |
=== 15671 === 2 -> _create_wheel (from /mnt/stuff/src/my-cpan/poe-quickie/lib/POE/Quickie.pm at 93) | |
=== 15671 === 2 -> POE::Wheel::Run(1) -> select stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15671 === 2 -> POE::Wheel::Run(1) -> select stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15671 === 2 -> _child_stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Wheel/Run.pm at 691) | |
ok 1 - Got stdout | |
ok 2 - Got context | |
ok 3 - $quickie->processes() works | |
=== 15671 === 2 -> _create_wheel (from /mnt/stuff/src/my-cpan/poe-quickie/lib/POE/Quickie.pm at 93) | |
=== 15671 === 2 -> POE::Wheel::Run(2) -> select stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15671 === 2 -> _child_stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Wheel/Run.pm at 791) | |
ok 4 - Got stderr | |
ok 5 - Got context | |
=== 15671 === 2 -> POE::Wheel::Run(1) -> select stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15671 === 2 -> POE::Wheel::Run(2) -> select stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15671 === 2 -> _child_signal (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/Signals.pm at 602) | |
=== 15671 === 2 -> POE::Wheel::Run(2) -> select stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15671 === 2 -> _child_signal (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/Signals.pm at 602) | |
=== 15671 === 2 -> _stop (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/Sessions.pm at 571) | |
ok | |
All tests successful. | |
Files=1, Tests=5, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.08 cusr 0.01 csys = 0.13 CPU) | |
Result: PASS | |
t/02_success.t .. | |
1..5 | |
=== 15675 === 2 -> _start (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Kernel.pm at 1413) | |
=== 15675 === 2 -> _create_wheel (from /mnt/stuff/src/my-cpan/poe-quickie/lib/POE/Quickie.pm at 93) | |
=== 15675 === 2 -> POE::Wheel::Run(1) -> select stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15675 === 2 -> POE::Wheel::Run(1) -> select stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15675 === 2 -> _child_stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Wheel/Run.pm at 691) | |
ok 1 - Got stdout | |
ok 2 - Got context | |
ok 3 - $quickie->processes() works | |
=== 15675 === 2 -> _create_wheel (from /mnt/stuff/src/my-cpan/poe-quickie/lib/POE/Quickie.pm at 93) | |
=== 15675 === 2 -> POE::Wheel::Run(2) -> select stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15675 === 2 -> _child_stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Wheel/Run.pm at 791) | |
ok 4 - Got stderr | |
ok 5 - Got context | |
=== 15675 === 2 -> POE::Wheel::Run(1) -> select stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15675 === 2 -> POE::Wheel::Run(2) -> select stdout (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) | |
=== 15675 === 2 -> _child_signal (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/Signals.pm at 602) | |
=== 15675 === 2 -> POE::Wheel::Run(2) -> select stderr (from /home/hinrik/perl5/perlbrew/perls/perl-5.13.11/lib/site_perl/5.13.11/POE/Resource/FileHandles.pm at 240) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment