Thread: [poe-commits] SF.net SVN: poe:[2397] trunk/poe
Brought to you by:
rcaputo
From: <rc...@us...> - 2008-08-16 06:10:05
|
Revision: 2397 http://poe.svn.sourceforge.net/poe/?rev=2397&view=rev Author: rcaputo Date: 2008-08-16 06:10:15 +0000 (Sat, 16 Aug 2008) Log Message: ----------- Add Yuval Kogman's test to ensure proper signal dispatch order. Modified Paths: -------------- trunk/poe/MANIFEST Added Paths: ----------- trunk/poe/t/90_regression/kogman-sig-order.t Modified: trunk/poe/MANIFEST =================================================================== --- trunk/poe/MANIFEST 2008-07-28 06:45:22 UTC (rev 2396) +++ trunk/poe/MANIFEST 2008-08-16 06:10:15 UTC (rev 2397) @@ -136,6 +136,7 @@ t/90_regression/broeren-win32-nbio.t t/90_regression/cfedde-filter-httpd.t t/90_regression/ferrari-server-unix.t +t/90_regression/kogman-sig-order.t t/90_regression/merijn-sigchld-system.t t/90_regression/neyuki_detach.t t/90_regression/rt14444-arg1.t Added: trunk/poe/t/90_regression/kogman-sig-order.t =================================================================== --- trunk/poe/t/90_regression/kogman-sig-order.t (rev 0) +++ trunk/poe/t/90_regression/kogman-sig-order.t 2008-08-16 06:10:15 UTC (rev 2397) @@ -0,0 +1,390 @@ +# $Id: $ +# vim: filetype=perl + +# Tests propagation of signals through the session ancestry + +use warnings; +use strict; + +use Test::More; + +plan 'no_plan'; + +sub POE::Kernel::ASSERT_DEFAULT () { 1 } +use POE; + +{ + my @log; + + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->sig("foo" => "foo"); + $_[KERNEL]->signal( $_[SESSION], "foo" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[STATE, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ leave_start => $session ], + [ foo => $session ], + [ stop => $session ], + ], + "simple signal on one session", + ); +} + +{ + my @log; + + my $child; + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $child = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->delay("bar" => 0.1); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->sig("foo" => "foo"); + $_[KERNEL]->signal( $_[SESSION], "foo" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ enter_start => $child ], + [ leave_start => $child ], + [ child => $session ], + [ leave_start => $session ], + [ foo => $session ], + [ default => bar => $child ], + [ stop => $child ], + [ child => $session ], + [ stop => $session ], + ], + "signal on parent, oblivious child", + ); +} + +{ + my @log; + + my $child; + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $child = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->delay("bar" => 0.1); + $_[KERNEL]->sig("foo" => "foo"); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->sig("foo" => "foo"); + $_[KERNEL]->signal( $_[SESSION], "foo" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ enter_start => $child ], + [ leave_start => $child ], + [ child => $session ], + [ leave_start => $session ], + [ foo => $child ], + [ foo => $session ], + [ default => bar => $child ], + [ stop => $child ], + [ child => $session ], + [ stop => $session ], + ], + "signal on child, then parent", + ); +} + +{ + my @log; + + my $child; + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $child = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->delay("bar" => 1); + $_[KERNEL]->sig("TERM" => "TERM"); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->sig("TERM" => "TERM"); + $_[KERNEL]->signal( $_[SESSION], "TERM" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ enter_start => $child ], + [ leave_start => $child ], + [ child => $session ], + [ leave_start => $session ], + [ default => TERM => $child ], + [ default => TERM => $session ], + [ stop => $child ], + [ child => $session ], + [ stop => $session ], + ], + "TERM signal on child, then parent", + ); +} + +{ + my @log; + + my $child; + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $child = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->delay("bar" => 1); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->signal( $_[SESSION], "TERM" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ enter_start => $child ], + [ leave_start => $child ], + [ child => $session ], + [ leave_start => $session ], + [ stop => $child ], + [ child => $session ], + [ stop => $session ], + ], + "TERM signal with no handlers on child, then parent", + ); +} + +{ + my @log; + + my ( $child, $grandchild ); + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $child = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $grandchild = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->delay("bar" => 1); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->sig( TERM => "TERM" ); + $_[KERNEL]->delay("bar" => 1); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->signal( $_[SESSION], "TERM" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ enter_start => $child ], + [ enter_start => $grandchild ], + [ leave_start => $grandchild ], + [ child => $child ], + [ leave_start => $child ], + [ child => $session ], + [ leave_start => $session ], + [ default => TERM => $child ], + [ stop => $grandchild ], + [ child => $child ], + [ stop => $child ], + [ child => $session ], + [ stop => $session ], + ], + "TERM signal on granchild, then child (with handler), then parent", + ); +} + +{ + my @log; + + my ( $child, $grandchild ); + my $session = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $child = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $grandchild = POE::Session->create( + inline_states => { + _start => sub { + push @log, [ enter_start => $_[SESSION] ]; + $_[KERNEL]->delay("bar" => 1); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->delay("bar" => 1); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + $_[KERNEL]->signal( $_[SESSION], "TERM" ); + push @log, [ leave_start => $_[SESSION] ]; + }, + _child => sub { push @log, [ child => $_[SESSION] ] }, + _stop => sub { push @log, [ stop => $_[SESSION] ] }, + _default => sub { push @log, [ default => @_[ARG0, SESSION] ] }, + foo => sub { push @log, [ foo => $_[SESSION] ] }, + }, + ); + + POE::Kernel->run; + + is_deeply( + \@log, + [ + [ enter_start => $session ], + [ enter_start => $child ], + [ enter_start => $grandchild ], + [ leave_start => $grandchild ], + [ child => $child ], + [ leave_start => $child ], + [ child => $session ], + [ leave_start => $session ], + [ stop => $grandchild ], + [ child => $child ], + [ stop => $child ], + [ child => $session ], + [ stop => $session ], + ], + "TERM signal with no handlers on granchild, then child, then parent", + ); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-02-10 09:32:14
|
Revision: 2427 http://poe.svn.sourceforge.net/poe/?rev=2427&view=rev Author: rcaputo Date: 2009-02-10 09:32:08 +0000 (Tue, 10 Feb 2009) Log Message: ----------- Fix a plethora of warnings that were uncovered by lexically scoping previously global $^W clears. ZOMG the horrors! Modified Paths: -------------- trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/Gtk.pm trunk/poe/lib/POE/Loop/TkCommon.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/t/20_resources/00_base/signals.pm trunk/poe/t/90_regression/merijn-sigchld-system.t trunk/poe/t/90_regression/rt1648-tied-stderr.t Modified: trunk/poe/lib/POE/Kernel.pm =================================================================== --- trunk/poe/lib/POE/Kernel.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Kernel.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -863,8 +863,9 @@ if (TRACE_EVENTS) { my $log_session = $session; - $log_session = $self->_data_alias_loggable($session) - unless $type & ET_START; + $log_session = $self->_data_alias_loggable($session) unless ( + $type & ET_START + ); my $string_etc = join(" ", map { defined() ? $_ : "(undef)" } @$etc); _warn( "<ev> Dispatching event $seq ``$event'' ($string_etc) from ", Modified: trunk/poe/lib/POE/Loop/Gtk.pm =================================================================== --- trunk/poe/lib/POE/Loop/Gtk.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Loop/Gtk.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -93,7 +93,7 @@ $self->_dispatch_event ( $self, $self, EN_SIGNAL, ET_SIGNAL, [ 'UIDESTROY' ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); } return 0; Modified: trunk/poe/lib/POE/Loop/TkCommon.pm =================================================================== --- trunk/poe/lib/POE/Loop/TkCommon.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Loop/TkCommon.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -36,7 +36,7 @@ $self->_dispatch_event( $self, $self, EN_SIGNAL, ET_SIGNAL, [ 'UIDESTROY' ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); } } @@ -116,7 +116,7 @@ $poe_kernel->_dispatch_event( $poe_kernel, $poe_kernel, EN_SIGNAL, ET_SIGNAL, [ 'UIDESTROY' ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); } } Modified: trunk/poe/lib/POE/Loop.pm =================================================================== --- trunk/poe/lib/POE/Loop.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Loop.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -317,7 +317,7 @@ $self->_dispatch_event( $self, $self, EN_SIGNAL, ET_SIGNAL, [ 'UIDESTROY' ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); } return 0; Modified: trunk/poe/lib/POE/Resource/Events.pm =================================================================== --- trunk/poe/lib/POE/Resource/Events.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Resource/Events.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -232,9 +232,10 @@ if (TRACE_EVENTS) { foreach ($kr_queue->peek_items(sub { 1 })) { + my @event = map { defined() ? $_ : "(undef)" } @{$_->[ITEM_PAYLOAD]}; _warn( "<ev> time($_->[ITEM_PRIORITY]) id($_->[ITEM_ID]) ", - "event(@{$_->[ITEM_PAYLOAD]})\n" + "event(@event)\n" ); } } Modified: trunk/poe/lib/POE/Resource/Sessions.pm =================================================================== --- trunk/poe/lib/POE/Resource/Sessions.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Resource/Sessions.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -476,13 +476,13 @@ $self->_dispatch_event( $parent, $self, EN_CHILD, ET_CHILD, [ CHILD_GAIN, $child ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); $self->_dispatch_event( $child, $self, EN_PARENT, ET_PARENT, [ $self->_data_ses_get_parent($child), $parent, ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); } @@ -491,7 +491,7 @@ my $stop_return = $self->_dispatch_event( $session, $self->get_active_session(), EN_STOP, ET_STOP, [], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); # If the departing session has a parent, notify it that the session @@ -501,7 +501,7 @@ $self->_dispatch_event( $parent, $self, EN_CHILD, ET_CHILD, [ CHILD_LOSE, $session, $stop_return ], - __FILE__, __LINE__, time(), -__LINE__ + __FILE__, __LINE__, undef, time(), -__LINE__ ); } Modified: trunk/poe/lib/POE/Wheel/FollowTail.pm =================================================================== --- trunk/poe/lib/POE/Wheel/FollowTail.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Wheel/FollowTail.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -81,7 +81,8 @@ } my @start_stat; - @start_stat = stat($filename) if defined $handle; + @start_stat = stat($handle) if defined $handle; + @start_stat = (-1) x 8 unless @start_stat; my $poll_interval = ( defined($params{PollInterval}) Modified: trunk/poe/lib/POE/Wheel/ReadLine.pm =================================================================== --- trunk/poe/lib/POE/Wheel/ReadLine.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/lib/POE/Wheel/ReadLine.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -2,6 +2,7 @@ package POE::Wheel::ReadLine; +use warnings; use strict; BEGIN { eval { require bytes } and bytes->import; } @@ -27,9 +28,6 @@ my $tc_visual_bell; # How to ring the terminal. my $tc_has_ce; # Termcap can clear to end of line. -# Screen extent. -my ($trk_rows, $trk_cols); - # Private STDIN and STDOUT. my $stdin = gensym(); open($stdin, "<&STDIN") or die "Can't open private STDIN: $!"; @@ -95,7 +93,6 @@ my $ospeed = undef; my $termios = undef; my $term = undef; -my $termios = undef; my $tc_left = undef; my $trk_cols = undef; my $trk_rows = undef; @@ -2136,7 +2133,6 @@ } else { $self->rl_ding; } - next; } sub rl_quoted_insert { @@ -2985,10 +2981,11 @@ my ($self, $seq) = @_; if (exists $english_to_termcap{lc($seq)}) { my $key = $self->{termcap}->Tputs($english_to_termcap{lc($seq)}, 1); - $seq = $key; + $seq = defined($key) ? $key : ""; } elsif (exists $english_to_key{lc($seq)}) { $seq = $english_to_key{lc($seq)}; } + return $seq; } Modified: trunk/poe/t/20_resources/00_base/signals.pm =================================================================== --- trunk/poe/t/20_resources/00_base/signals.pm 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/t/20_resources/00_base/signals.pm 2009-02-10 09:32:08 UTC (rev 2427) @@ -197,7 +197,7 @@ ); { my ($tot, $type, $ses) = $poe_kernel->_data_sig_handled_status(); - ok($tot == 0, "SIGQUIT handled by zero sessions"); + ok(!defined($tot), "SIGQUIT handled by zero sessions"); ok($type == POE::Kernel::SIGTYPE_TERMINAL, "SIGQUIT is terminal"); ok( eq_array($ses, [ $ses_2 ]), "SIGQUIT touched correct session" ); } @@ -253,7 +253,7 @@ ); my ($tot, $type, $ses) = $poe_kernel->_data_sig_handled_status(); - ok($tot == 0, "nonexistent signal handled by zero sessions"); + ok(!defined($tot), "nonexistent signal handled by zero sessions"); ok( $type == POE::Kernel::SIGTYPE_BENIGN, "nonexistent signal is benign" @@ -327,7 +327,7 @@ ); { my ($tot, $type, $ses) = $poe_kernel->_data_sig_handled_status(); - ok($tot == 0, "SIGQUIT handled by zero sessions"); + ok(!defined($tot), "SIGQUIT handled by zero sessions"); ok($type == POE::Kernel::SIGTYPE_TERMINAL, "SIGQUIT is terminal"); ok( eq_array($ses, [ $ses_2 ]), "SIGQUIT touched session 2" ); } Modified: trunk/poe/t/90_regression/merijn-sigchld-system.t =================================================================== --- trunk/poe/t/90_regression/merijn-sigchld-system.t 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/t/90_regression/merijn-sigchld-system.t 2009-02-10 09:32:08 UTC (rev 2427) @@ -33,23 +33,26 @@ POE::Session->create( inline_states => { _start => sub { + my $sig_chld = $SIG{CHLD}; + $sig_chld = "(undef)" unless defined $sig_chld; + is( system( $command ), 0, - "System returns properly chld($SIG{CHLD}) err($!)" + "System returns properly chld($sig_chld) err($!)" ); $! = undef; $_[KERNEL]->sig( 'CHLD', 'chld' ); is( system( $command ), 0, - "System returns properly chld($SIG{CHLD}) err($!)" + "System returns properly chld($sig_chld) err($!)" ); $! = undef; $_[KERNEL]->sig( 'CHLD' ); is( system( $command ), 0, - "System returns properly chld($SIG{CHLD}) err($!)" + "System returns properly chld($sig_chld) err($!)" ); $! = undef; }, Modified: trunk/poe/t/90_regression/rt1648-tied-stderr.t =================================================================== --- trunk/poe/t/90_regression/rt1648-tied-stderr.t 2009-02-10 09:05:42 UTC (rev 2426) +++ trunk/poe/t/90_regression/rt1648-tied-stderr.t 2009-02-10 09:32:08 UTC (rev 2427) @@ -83,11 +83,12 @@ use Tie::Handle; use vars qw(@ISA); @ISA = 'Tie::Handle'; + use Symbol qw(gensym); sub TIEHANDLE { my $class = shift; - my $fh = do { \local *HANDLE}; - bless $fh,$class; + my $fh = gensym(); + bless $fh, $class; $fh->OPEN(@_) if (@_); return $fh; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lo...@us...> - 2009-02-16 10:31:29
|
Revision: 2439 http://poe.svn.sourceforge.net/poe/?rev=2439&view=rev Author: lotr Date: 2009-02-16 10:31:21 +0000 (Mon, 16 Feb 2009) Log Message: ----------- add package/object states to POE::NFA Modified Paths: -------------- trunk/poe/lib/POE/NFA.pm Added Paths: ----------- trunk/poe/t/10_units/03_base/18_nfa_usage.t Modified: trunk/poe/lib/POE/NFA.pm =================================================================== --- trunk/poe/lib/POE/NFA.pm 2009-02-16 10:22:28 UTC (rev 2438) +++ trunk/poe/lib/POE/NFA.pm 2009-02-16 10:31:21 UTC (rev 2439) @@ -10,6 +10,8 @@ use Carp qw(carp croak); sub SPAWN_INLINES () { 'inline_states' } +sub SPAWN_OBJECTS () { 'object_states' } +sub SPAWN_PACKAGES () { 'package_states' } sub SPAWN_OPTIONS () { 'options' } sub OPT_TRACE () { 'trace' } @@ -145,6 +147,36 @@ #------------------------------------------------------------------------------ # Spawn a new state machine. +sub _add_ref_states { + my ($states, $refs) = @_; + foreach my $state (keys %$refs) { + $states->{$state} = {}; + my $data = $refs->{$state}; + croak "the data for state '$state' should be an array" + unless (ref $data eq 'ARRAY'); + croak "the array for state '$state' has an odd number of elements" + if (@$data & 1); + + while (my ($ref, $events) = splice(@$data, 0, 2)) { + if (ref $events eq 'ARRAY') { + foreach my $event (@$events) { + $states->{$state}->{$event} = [ $ref, $event ]; + } + } + elsif (ref $events eq 'HASH') { + foreach my $event (keys %$events) { + my $method = $events->{$event}; + $states->{$state}->{$event} = [ $ref, $method ]; + } + } + else { + croak "events with '$ref' for state '$state' " . + "need to be a hash or array ref"; + } + } + } +} + sub spawn { my ($type, @params) = @_; my @args; @@ -164,10 +196,25 @@ $options = { } unless defined $options; # States are required. - croak "$type constructor requires a " . SPAWN_INLINES . " parameter" - unless exists $params{+SPAWN_INLINES}; - my $states = delete $params{+SPAWN_INLINES}; + croak "$type constructor requires at least one of the following parameters: " . join (", ", SPAWN_INLINES, SPAWN_OBJECTS, SPAWN_PACKAGES) + unless ( exists $params{+SPAWN_INLINES} or + exists $params{+SPAWN_OBJECTS} or + exists $params{+SPAWN_PACKAGES} ); + my $states = delete $params{+SPAWN_INLINES} + if (exists $params{+SPAWN_INLINES}); + $states ||= {}; + + if (exists $params{+SPAWN_OBJECTS}) { + my $objects = delete $params{+SPAWN_OBJECTS}; + _add_ref_states($states, $objects); + } + + if (exists $params{+SPAWN_PACKAGES}) { + my $packages = delete $params{+SPAWN_PACKAGES}; + _add_ref_states($states, $packages); + } + # These are unknown. croak( "$type constructor does not recognize these parameter names: ", @@ -863,9 +910,29 @@ $machine{state_2}{event_1} = \&handler_3; -The spawn() method currently only accepts C<inline_states> and -C<options>. Others may be added as necessary. +Instead of C<inline_states>, C<object_states> or C<package_states> may +be used. These map the events of a state to an object or package method +respectively. + object_states => { + state_1 => [ + $object_1 => [qw(event_1 event_2)], + ], + state_2 => [ + $object_2 => { + event_1 => method_1, + event_2 => method_2, + } + ] + } + +In the example above, in the case of C<event_1> coming in while the machine +is in C<state_1>, method C<event_1> will be called on $object_1. If the +machine is in C<state_2>, method C<method_1> will be called on $object_2. + +C<package_states> is very similar, but instead of using an $object, you +pass in a C<Package::Name> + =head2 goto_state NEW_STATE[, ENTRY_EVENT[, EVENT_ARGS]] goto_state() puts the machine into a new state. If an ENTRY_EVENT is Added: trunk/poe/t/10_units/03_base/18_nfa_usage.t =================================================================== --- trunk/poe/t/10_units/03_base/18_nfa_usage.t (rev 0) +++ trunk/poe/t/10_units/03_base/18_nfa_usage.t 2009-02-16 10:31:21 UTC (rev 2439) @@ -0,0 +1,58 @@ +use strict; + +package main; + +use Test::More; +use POE::NFA; + +plan 'no_plan'; + +my $nfa; + +eval { + POE::NFA->spawn('foo') +}; +like($@, qr/odd number/, 'NFA treats its params as a hash'); + +eval { + POE::NFA->spawn(inline_states => {initial => { start => sub { 0 } } }) +}; +like($@, qr/requires a working Kernel/, 'NFA needs a working kernel'); + +eval "use POE::Kernel"; +eval { + POE::NFA->spawn(crap => 'foo'); +}; +like($@, qr/constructor requires at least one of/, 'need states'); + +eval { + $nfa = POE::NFA->spawn(inline_states => {initial => { start => sub { 0 } } }) +}; +isa_ok($nfa, 'POE::NFA', 'most basic machine'); + +eval { + POE::NFA->spawn(inline_states => {initial => { start => sub { 0 } } }, crap => 'foo') +}; +like($@, qr/constructor does not recognize/, 'unknown parameter'); + +eval { + POE::NFA->spawn(package_states => {initial => 'foo'}); +}; +like($@, qr/the data for state/, 'bad state data'); + +eval { + POE::NFA->spawn(package_states => {initial => ['Foo']}); +}; +like($@, qr/the array for state/, 'bad state data'); + +eval { + POE::NFA->spawn(package_states => {initial => ['Foo' => 'bar']}); +}; +like($@, qr/need to be a hash or array ref/, 'bad event data'); + +eval { + $nfa = POE::NFA->spawn(package_states => {initial => ['Foo' => [qw(foo bar)]]}); +}; +isa_ok($nfa, 'POE::NFA', 'spawn with package_states'); + +POE::Kernel->run; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bin...@us...> - 2009-02-16 13:11:58
|
Revision: 2445 http://poe.svn.sourceforge.net/poe/?rev=2445&view=rev Author: bingosnet Date: 2009-02-16 13:11:47 +0000 (Mon, 16 Feb 2009) Log Message: ----------- Added runstate parameter to POE::NFA, similar to POE::Sessions heap. Documented and updated nfa test Modified Paths: -------------- trunk/poe/lib/POE/NFA.pm trunk/poe/t/10_units/03_base/18_nfa_usage.t Modified: trunk/poe/lib/POE/NFA.pm =================================================================== --- trunk/poe/lib/POE/NFA.pm 2009-02-16 11:23:16 UTC (rev 2444) +++ trunk/poe/lib/POE/NFA.pm 2009-02-16 13:11:47 UTC (rev 2445) @@ -13,6 +13,7 @@ sub SPAWN_OBJECTS () { 'object_states' } sub SPAWN_PACKAGES () { 'package_states' } sub SPAWN_OPTIONS () { 'options' } +sub SPAWN_RUNSTATE () { 'runstate' } sub OPT_TRACE () { 'trace' } sub OPT_DEBUG () { 'debug' } @@ -218,6 +219,9 @@ _add_ref_states($states, $packages); } + my $runstate = delete $params{+SPAWN_RUNSTATE}; + $runstate ||= {}; + # These are unknown. croak( "$type constructor does not recognize these parameter names: ", @@ -226,7 +230,7 @@ # Build me. my $self = bless [ - { }, # SELF_RUNSTATE + $runstate, # SELF_RUNSTATE $options, # SELF_OPTIONS $states, # SELF_STATES undef, # SELF_CURRENT @@ -936,6 +940,10 @@ C<package_states> is very similar, but instead of using an $object, you pass in a C<Package::Name> +The C<runstate> parameter allows C<RUNSTATE> to be initialized differently +at instantiation time. C<RUNSTATE>, like heaps, are usually anonymous hashrefs, +but C<runstate> may set them to be array references or even objects. + =head2 goto_state NEW_STATE[, ENTRY_EVENT[, EVENT_ARGS]] goto_state() puts the machine into a new state. If an ENTRY_EVENT is Modified: trunk/poe/t/10_units/03_base/18_nfa_usage.t =================================================================== --- trunk/poe/t/10_units/03_base/18_nfa_usage.t 2009-02-16 11:23:16 UTC (rev 2444) +++ trunk/poe/t/10_units/03_base/18_nfa_usage.t 2009-02-16 13:11:47 UTC (rev 2445) @@ -55,4 +55,10 @@ }; isa_ok($nfa, 'POE::NFA', 'spawn with package_states'); +eval { + $nfa = POE::NFA->spawn(package_states => {initial => ['Foo' => [qw(foo bar)]]}, runstate => [ ] ); +}; +isa_ok($nfa, 'POE::NFA', 'spawn with package_states'); +is( ref $nfa->[0], 'ARRAY', 'RUNSTATE is an ARRAYREF' ); + POE::Kernel->run; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ap...@us...> - 2009-02-17 06:42:03
|
Revision: 2448 http://poe.svn.sourceforge.net/poe/?rev=2448&view=rev Author: apocal Date: 2009-02-17 06:42:00 +0000 (Tue, 17 Feb 2009) Log Message: ----------- added placeholder test in root t/ directory to get around perl-5.6.2+Test::Harness failures Modified Paths: -------------- trunk/poe/MANIFEST Added Paths: ----------- trunk/poe/t/00_info.t Modified: trunk/poe/MANIFEST =================================================================== --- trunk/poe/MANIFEST 2009-02-17 05:04:43 UTC (rev 2447) +++ trunk/poe/MANIFEST 2009-02-17 06:42:00 UTC (rev 2448) @@ -83,6 +83,7 @@ examples/thrash.perl examples/watermarks.perl examples/wheels2.perl +t/00_info.t t/10_units/01_pod/01_pod.t t/10_units/01_pod/02_pod_coverage.t t/10_units/02_pipes/01_base.t Added: trunk/poe/t/00_info.t =================================================================== --- trunk/poe/t/00_info.t (rev 0) +++ trunk/poe/t/00_info.t 2009-02-17 06:42:00 UTC (rev 2448) @@ -0,0 +1,9 @@ +#!/usr/bin/perl +use strict; use warnings; + +use Test::More tests => 1; +use_ok( 'POE' ); + +# idea from Test::Harness, thanks! +diag("Testing POE $POE::VERSION, Perl $], $^X on $^O"); + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-02-17 08:03:54
|
Revision: 2450 http://poe.svn.sourceforge.net/poe/?rev=2450&view=rev Author: rcaputo Date: 2009-02-17 08:03:49 +0000 (Tue, 17 Feb 2009) Log Message: ----------- Resolve rt.cpan.org #38974, reported by Jari Bonte. If TERM is misset, we will skip the POE::Wheel::ReadLine test rather than fail. Modified Paths: -------------- trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe-test-loops/lib/POE/Test/Loops/wheel_readline.pm Modified: trunk/poe/lib/POE/Wheel/ReadLine.pm =================================================================== --- trunk/poe/lib/POE/Wheel/ReadLine.pm 2009-02-17 07:28:32 UTC (rev 2449) +++ trunk/poe/lib/POE/Wheel/ReadLine.pm 2009-02-17 08:03:49 UTC (rev 2450) @@ -699,7 +699,7 @@ # Get the current terminal's capabilities. $term = $ENV{TERM} || 'vt100'; - $termcap = Term::Cap->Tgetent( { TERM => $term, OSPEED => $ospeed } ); + $termcap = eval { Term::Cap->Tgetent( { TERM => $term, OSPEED => $ospeed } ) }; die "could not find termcap entry for ``$term'': $!" unless defined $termcap; # Require certain capabilities. @@ -881,6 +881,8 @@ sub DESTROY { my $self = shift; + return unless $initialised; + # Stop selecting on the handle. $poe_kernel->select($stdin); Modified: trunk/poe-test-loops/lib/POE/Test/Loops/wheel_readline.pm =================================================================== --- trunk/poe-test-loops/lib/POE/Test/Loops/wheel_readline.pm 2009-02-17 07:28:32 UTC (rev 2449) +++ trunk/poe-test-loops/lib/POE/Test/Loops/wheel_readline.pm 2009-02-17 08:03:49 UTC (rev 2450) @@ -132,20 +132,44 @@ if ($^O eq "MSWin32") { $error = "$^O cannot multiplex terminals"; } - if (!-t STDIN) { + elsif (!-t STDIN) { $error = "not running in a terminal"; } else { eval "use Term::ReadKey"; if ($@) { - $error = "This test requires Term::ReadKey" if $@; + $error = "This test requires Term::ReadKey"; } else { eval "use IO::Pty"; - $error = "This test requires IO::Pty" if $@; + if ($@) { + $error = "This test requires IO::Pty"; + } + else { + eval "use Term::Cap"; + if ($@) { + $error = "This test requires Term::Cap"; + } + } } } + unless ($error) { + use POSIX (); + + my $termios = POSIX::Termios->new(); + $termios->getattr(); + my $ospeed = $termios->getospeed() || eval { POSIX::B38400() } || 0; + + my $term = $ENV{TERM} || 'vt100'; + my $termcap = eval { Term::Cap->Tgetent( { TERM => $term, OSPEED => $ospeed } ) }; + unless ($termcap) { + $error = "Term::Cap failure: $@"; + $error =~ s/ at \S+ line \d+.*//; + $error =~ s/\s+/ /g; + } + } + if ($error) { plan skip_all => $error; CORE::exit(); @@ -223,7 +247,7 @@ use POE qw(Filter::Stream Wheel::ReadWrite); eval "use POE::Wheel::ReadLine"; -if ($@ and $@ =~ /requires a termcap/) { +if ($@ and $@ =~ /(requires a termcap|failed termcap lookup)/) { my $error = $@; $error =~ s/ at \S+ line \d+.*//; $error =~ s/\s+/ /g; @@ -265,10 +289,11 @@ # The ReadLine wheel to drive and test. - $heap->{readline} = POE::Wheel::ReadLine->new( - InputEvent => "got_readline_input", - appname => "my_cli", - ); + eval { + $heap->{readline} = POE::Wheel::ReadLine->new( + InputEvent => "got_readline_input", + appname => "my_cli", + ); # And start testing. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-02-27 03:24:54
|
Revision: 2470 http://poe.svn.sourceforge.net/poe/?rev=2470&view=rev Author: rcaputo Date: 2009-02-27 03:24:48 +0000 (Fri, 27 Feb 2009) Log Message: ----------- Apply Philip Gwyn's testcase and patch for an end-time hang when USE_SIGCHLD is enabled, POE::Kernel is idle, but there are one or more outstanding child processes waiting to be reaped. The hang was caused by clearing $SIG{CHLD}, which would never allow POE::Kernel's "we have child processes" flags to be cleared. Resolves rt.cpan.org #39872. Modified Paths: -------------- trunk/poe/MANIFEST trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Resource/Signals.pm Added Paths: ----------- trunk/poe/t/90_regression/rt39872-sigchld.t Modified: trunk/poe/MANIFEST =================================================================== --- trunk/poe/MANIFEST 2009-02-25 08:10:39 UTC (rev 2469) +++ trunk/poe/MANIFEST 2009-02-27 03:24:48 UTC (rev 2470) @@ -145,6 +145,7 @@ t/90_regression/rt1648-tied-stderr.t t/90_regression/rt19908-merlyn-stop.t t/90_regression/rt23181-sigchld-rc.t +t/90_regression/rt39872-sigchld.t t/90_regression/steinert-passed-wheel.t t/90_regression/steinert-signal-integrity.t t/90_regression/suzman_windows.t Modified: trunk/poe/lib/POE/Loop/PerlSignals.pm =================================================================== --- trunk/poe/lib/POE/Loop/PerlSignals.pm 2009-02-25 08:10:39 UTC (rev 2469) +++ trunk/poe/lib/POE/Loop/PerlSignals.pm 2009-02-27 03:24:48 UTC (rev 2470) @@ -101,8 +101,17 @@ delete $signal_watched{$signal}; - unless ( USE_SIGCHLD ) { if ($signal eq 'CHLD' or $signal eq 'CLD') { + if ( USE_SIGCHLD ) { + if( $self->_data_sig_child_procs) { + # We need SIGCHLD to stay around after shutdown, so that + # child processes may be reaped and kr_child_procs=0 + if (TRACE_SIGNALS) { + POE::Kernel::_warn "<sg> Keeping SIG$signal anyway!"; + } + return; + } + } else { $self->_data_sig_cease_polling(); # We should never twiddle $SIG{CH?LD} under poe, unless we want to # override system() and friends. --hachi @@ -111,12 +120,17 @@ } } + delete $signal_watched{$signal}; + + my $state = 'DEFAULT'; if ($signal eq 'PIPE') { - $SIG{$signal} = "IGNORE"; - return; + $state = "IGNORE"; } - $SIG{$signal} = "DEFAULT"; + if (TRACE_SIGNALS) { + POE::Kernel::_warn "<sg> $state SIG$signal"; + } + $SIG{$signal} = $state; } sub loop_ignore_all_signals { Modified: trunk/poe/lib/POE/Resource/Signals.pm =================================================================== --- trunk/poe/lib/POE/Resource/Signals.pm 2009-02-25 08:10:39 UTC (rev 2469) +++ trunk/poe/lib/POE/Resource/Signals.pm 2009-02-27 03:24:48 UTC (rev 2470) @@ -612,16 +612,6 @@ return $kr_child_procs; } -# Reap child processes. Discard their statuses. Used to prevent -# zombie processes when nobody else is watching for children. See -# POE::Loop::Event for its use. - -sub _data_sig_ignore_sigchld { - my $pid; - 1 while $pid = waitpid(-1, WNOHANG); - $kr_child_procs = !$pid; -} - 1; __END__ Added: trunk/poe/t/90_regression/rt39872-sigchld.t =================================================================== --- trunk/poe/t/90_regression/rt39872-sigchld.t (rev 0) +++ trunk/poe/t/90_regression/rt39872-sigchld.t 2009-02-27 03:24:48 UTC (rev 2470) @@ -0,0 +1,149 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +sub DEBUG () { 0 } +sub POE::Kernel::USE_SIGCHLD () { 1 } +sub POE::Kernel::ASSERT_DEFAULT () { 1 } + +use POE; +use Test::More; +use POE::Wheel::Run; +use POSIX qw( SIGINT ); + +if ($^O eq "MSWin32") { + plan skip_all => "Test not working on $^O"; + exit 0; +} + +plan tests => 5; + +POE::Session->create( + inline_states => { + _start => \&_start, + _stop => \&_stop, + stdout => \&stdout, + stdout2 => \&stdout2, + stderr => \&stderr, + sig_CHLD => \&sig_CHLD, + error => \&error, + done => \&done + } +); + +$poe_kernel->run; +pass( "Sane exit" ); +exit; + +sub _start { + my( $kernel, $heap ) = @_[KERNEL, HEAP]; + + my $prog = <<'PERL'; + $|++; + my $N = shift; + print "I am $N\n"; + while(<STDIN>) { + chomp; + exit 0 if /^bye/; + print "Unknown command '$_'\n"; + } +PERL + + DEBUG and warn "_start"; + $kernel->alias_set( 'worker' ); + $kernel->sig( CHLD => 'sig_CHLD' ); + + $heap->{W1} = POE::Wheel::Run->new( + Program => [ $^X, '-e', $prog, "W1" ], + StdoutEvent => 'stdout', + StderrEvent => 'stderr', + ErrorEvent => 'error' + ); + $heap->{id2W}{ $heap->{W1}->ID } = 'W1'; + $heap->{pid2W}{ $heap->{W1}->PID } = 'W1'; + + $heap->{W2} = POE::Wheel::Run->new( + Program => [ $^X, '-e', $prog, "W2" ], + StdoutEvent => 'stdout', + StderrEvent => 'stderr', + ErrorEvent => 'error' + ); + $heap->{id2W}{ $heap->{W2}->ID } = 'W2'; + $heap->{pid2W}{ $heap->{W2}->PID } = 'W2'; +} + +sub _stop { + my( $kernel, $heap ) = @_[KERNEL, HEAP]; + DEBUG and warn "_stop"; +} + +sub done { + my( $kernel, $heap ) = @_[KERNEL, HEAP]; + DEBUG and warn "done"; + + $kernel->alias_remove( 'worker' ); + $kernel->sig( 'CHLD' ); + + delete $heap->{W1}; + delete $heap->{W2}; + + my @list = keys %{ $heap->{pid2W} }; + is( 0+@list, 1, "One wheel left" ); + kill SIGINT, @list; + + alarm(5); $SIG{ALRM} = sub { die "test case didn't end sanely" }; +} + +sub stdout { + my( $kernel, $heap, $input, $id ) = @_[KERNEL, HEAP, ARG0, ARG1]; + my $N = $heap->{id2W}{$id}; + DEBUG and warn "Input $N ($id): '$input'"; + my $wheel = $heap->{ $N }; + ok( ($input =~ /I am $N/), "Intro output" ); + if( $N eq 'W1' ) { + $heap->{closing}{ $N } = 1; + $wheel->put( 'bye' ); + } +} + +sub stderr { + my( $kernel, $heap, $input, $id ) = @_[KERNEL, HEAP, ARG0, ARG1]; + my $N = $heap->{id2W}{$id}; + DEBUG and warn "Error $N ($id): '$input'"; +} + +sub error { + my( $kernel, $heap, $op, $errnum, $errstr, $id, $fh ) = @_[ + KERNEL, HEAP, ARG0..$#_ + ]; + + my $N = $heap->{id2W}{$id}; + DEBUG and warn "Error $N ($id): $op $errnum ($errstr)"; + my $wheel = $heap->{ $N }; + + if( $op eq 'read' and $errnum==0 ) { + # normal exit + } + else { + die "Error $N ($id): $op $errnum ($errstr)"; + } +} + +sub sig_CHLD { + my( $kernel, $heap, $signal, $pid, $status ) = @_[ + KERNEL, HEAP, ARG0..$#_ + ]; + + my $N = $heap->{pid2W}{$pid}; + DEBUG and warn "CHLD $N ($pid)"; + my $wheel = $heap->{ $N }; + + is( $heap->{closing}{$N}, 1, "$N closing" ); + + delete $heap->{closing}{$N}; + delete $heap->{pid2W}{$pid}; + delete $heap->{$N}; + delete $heap->{id2W}{ $wheel->ID }; + $kernel->yield( 'done' ); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-03-06 06:44:11
|
Revision: 2492 http://poe.svn.sourceforge.net/poe/?rev=2492&view=rev Author: rcaputo Date: 2009-03-06 06:44:04 +0000 (Fri, 06 Mar 2009) Log Message: ----------- Add Philip Gwyn's test for a failure for POE::Kernel to stop if lingering processes are around without a sig_child() to reap them. Modified Paths: -------------- trunk/poe/MANIFEST Added Paths: ----------- trunk/poe/t/90_regression/rt39872-sigchld-stop.t Modified: trunk/poe/MANIFEST =================================================================== --- trunk/poe/MANIFEST 2009-03-04 04:35:00 UTC (rev 2491) +++ trunk/poe/MANIFEST 2009-03-06 06:44:04 UTC (rev 2492) @@ -145,6 +145,7 @@ t/90_regression/rt1648-tied-stderr.t t/90_regression/rt19908-merlyn-stop.t t/90_regression/rt23181-sigchld-rc.t +t/90_regression/rt39872-sigchld-stop.t t/90_regression/rt39872-sigchld.t t/90_regression/steinert-passed-wheel.t t/90_regression/steinert-signal-integrity.t Added: trunk/poe/t/90_regression/rt39872-sigchld-stop.t =================================================================== --- trunk/poe/t/90_regression/rt39872-sigchld-stop.t (rev 0) +++ trunk/poe/t/90_regression/rt39872-sigchld-stop.t 2009-03-06 06:44:04 UTC (rev 2492) @@ -0,0 +1,162 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +sub DEBUG () { 0 } +my $REFCNT; +sub POE::Kernel::USE_SIGCHLD () { 1 } +sub POE::Kernel::ASSERT_DEFAULT () { 0 } +sub POE::Kernel::TRACE_SIGNALS () { 0 } +sub POE::Kernel::TRACE_REFCNT () { DEBUG and $REFCNT } + +use POE; +use Test::More; +use POE::Wheel::Run; +use POSIX qw( SIGINT SIGUSR1 ); + +if ($^O eq "MSWin32") { + plan skip_all => "Test not working on $^O"; + exit 0; +} + +$SIG{__WARN__} = sub { + print STDERR "$$: $_[0]"; +}; + + +plan tests => 3; + +our $PARENT = 1; + +POE::Session->create( + inline_states => { + _start => \&_start, + _stop => \&_stop, + + work => \&work, + child => \&child, + parent => \&parent, + T1 => \&T1, + T2 => \&T2, + + sig_CHLD => \&sig_CHLD, + sig_USR1 => \&sig_USR1, + done => \&done + } +); + +DEBUG and warn "Parent"; +$poe_kernel->run; +pass( "Sane exit" ) if $PARENT; +DEBUG and warn "Exit"; +exit; + + +sub _start { + my( $kernel, $heap ) = @_[KERNEL, HEAP]; + + DEBUG and warn "_start"; + $kernel->alias_set( 'worker' ); + $kernel->sig( CHLD => 'sig_CHLD' ); + + $kernel->yield( 'work' ); +} + +sub work { + my( $kernel, $heap, $session ) = @_[KERNEL, HEAP, SESSION]; + + foreach my $name ( qw( T1 T2 ) ) { + my $pid = fork; + die "Unable to fork: $!" unless defined $pid; + + if( $pid ) { # parent + $heap->{$name}{PID} = $pid; + $heap->{pid2N}{ $pid } = $name; + } + else { + $kernel->yield( 'child' ); + return; + } + } + + foreach my $name ( qw( T1 T2 ) ) { + $kernel->refcount_increment( $session->ID, $name ); + } + + $kernel->delay_add( 'parent', 3 ); + diag( "Wait 3" ); + + return; +} + +sub parent +{ + my( $kernel, $heap, $session ) = @_[KERNEL, HEAP, SESSION]; + DEBUG and warn "parent"; + kill SIGUSR1, $heap->{T1}{PID}; + $heap->{T1}{closing} = 1; +} + + +sub child +{ + my( $kernel, $heap, $session ) = @_[KERNEL, HEAP, SESSION]; + $PARENT = 0; + DEBUG and warn "child"; + $kernel->sig( 'CHLD' ); + $kernel->sig( USR1 => 'sig_USR1' ); + $kernel->refcount_increment( $session->ID, 'USR1' ); +} + +sub sig_USR1 +{ + my( $kernel, $heap, $session ) = @_[KERNEL, HEAP, SESSION]; + DEBUG and warn "USR1"; + $REFCNT = 1; + $kernel->sig( 'USR1' ); + $kernel->refcount_decrement( $session->ID, 'USR1' ); + $kernel->alias_remove( 'worker' ); +} + + +sub _stop { + my( $kernel, $heap ) = @_[KERNEL, HEAP]; + DEBUG and warn "_stop"; +} + +sub done { + my( $kernel, $heap, $session ) = @_[KERNEL, HEAP, SESSION]; + DEBUG and warn "done"; + + $kernel->alias_remove( 'worker' ); + $kernel->sig( 'CHLD' ); + + my @list = keys %{ $heap->{pid2N} }; + is( 0+@list, 1, "One child left ($list[0])" ); + kill SIGUSR1, @list; + + $REFCNT = 1; + $kernel->refcount_decrement( $session->ID, 'T2' ); + alarm(30); $SIG{ALRM} = sub { die "test case didn't end sanely" }; +} + +sub sig_CHLD { + my( $kernel, $heap, $signal, $pid, $status ) = @_[ + KERNEL, HEAP, ARG0..$#_ + ]; + + unless( $heap->{pid2N}{$pid} ) { + return; + } + + my $name = $heap->{pid2N}{$pid}; + my $D = $heap->{$name}; + + is( $D->{closing}, 1, "Expected child exited" ); + $kernel->refcount_decrement( $_[SESSION]->ID, $name ); + delete $heap->{$name}; + delete $heap->{pid2N}{$pid}; + + $kernel->yield( 'done' ); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-03-27 16:28:54
|
Revision: 2507 http://poe.svn.sourceforge.net/poe/?rev=2507&view=rev Author: rcaputo Date: 2009-03-27 16:28:34 +0000 (Fri, 27 Mar 2009) Log Message: ----------- Remove a new test that segfaults for some people, and bump the version for another (hopefully final) dev release. Modified Paths: -------------- trunk/poe/MANIFEST trunk/poe/lib/POE.pm Modified: trunk/poe/MANIFEST =================================================================== --- trunk/poe/MANIFEST 2009-03-14 20:43:28 UTC (rev 2506) +++ trunk/poe/MANIFEST 2009-03-27 16:28:34 UTC (rev 2507) @@ -146,7 +146,7 @@ t/90_regression/rt19908-merlyn-stop.t t/90_regression/rt23181-sigchld-rc.t t/90_regression/rt39872-sigchld-stop.t -t/90_regression/rt39872-sigchld.t +# TODO - Why does this segfault for others: t/90_regression/rt39872-sigchld.t t/90_regression/steinert-passed-wheel.t t/90_regression/steinert-signal-integrity.t t/90_regression/suzman_windows.t Modified: trunk/poe/lib/POE.pm =================================================================== --- trunk/poe/lib/POE.pm 2009-03-14 20:43:28 UTC (rev 2506) +++ trunk/poe/lib/POE.pm 2009-03-27 16:28:34 UTC (rev 2507) @@ -7,7 +7,7 @@ use Carp qw( croak ); use vars qw($VERSION $REVISION); -$VERSION = '1.003_05'; # NOTE - Should be #.### (three decimal places) +$VERSION = '1.003_06'; # NOTE - Should be #.### (three decimal places) $REVISION = do {my($r)=(q$Revision$=~/(\d+)/);sprintf"1.%04d",$r}; sub import { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bin...@us...> - 2009-07-15 10:47:07
|
Revision: 2571 http://poe.svn.sourceforge.net/poe/?rev=2571&view=rev Author: bingosnet Date: 2009-07-15 10:47:05 +0000 (Wed, 15 Jul 2009) Log Message: ----------- RT #47892: added regression test for PoCo-Server-TCP from Michael Fowler. Modified Paths: -------------- trunk/poe/MANIFEST Added Paths: ----------- trunk/poe/t/90_regression/somni-poco-server-tcp.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-07-19 07:39:04
|
Revision: 2576 http://poe.svn.sourceforge.net/poe/?rev=2576&view=rev Author: rcaputo Date: 2009-07-19 07:38:58 +0000 (Sun, 19 Jul 2009) Log Message: ----------- Apply Philip Gwyn's patch to deliver signals via pipe rather than directly into the queue. This avoids queue re-entrancy during find or modification operations, which has previously caused inconsistencies in the queue, event enqueuing and event dispatch. Philip's patch may be found along with a great problem description at http://rt.cpan.org/Public/Bug/Display.html?id=47966 Modified Paths: -------------- trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/t/90_regression/rt39872-sigchld-stop.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-07-20 06:21:50
|
Revision: 2581 http://poe.svn.sourceforge.net/poe/?rev=2581&view=rev Author: rcaputo Date: 2009-07-20 06:21:48 +0000 (Mon, 20 Jul 2009) Log Message: ----------- These tests have gone into POE::Test::Loops, where they may be useful for other POE::Loop writers. Modified Paths: -------------- trunk/poe/MANIFEST Removed Paths: ------------- trunk/poe/t/90_regression/kogman-sig-order.t trunk/poe/t/90_regression/merijn-sigchld-system.t trunk/poe/t/90_regression/rt39872-sigchld-stop.t trunk/poe/t/90_regression/rt39872-sigchld.t trunk/poe/t/90_regression/steinert-signal-integrity.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-07-25 22:28:57
|
Revision: 2601 http://poe.svn.sourceforge.net/poe/?rev=2601&view=rev Author: rcaputo Date: 2009-07-25 22:28:49 +0000 (Sat, 25 Jul 2009) Log Message: ----------- Set the POE::Test::Loops dependency to 1.020, and bump the version to 1.007 for release. Modified Paths: -------------- trunk/poe/lib/POE.pm trunk/poe/mylib/PoeBuildInfo.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-07-27 18:51:54
|
Revision: 2609 http://poe.svn.sourceforge.net/poe/?rev=2609&view=rev Author: rcaputo Date: 2009-07-27 18:51:38 +0000 (Mon, 27 Jul 2009) Log Message: ----------- Rely on POE::Test::Loops 1.021, which should be everywhere by now. Update links in documentation. Modified Paths: -------------- trunk/poe/lib/POE.pm trunk/poe/mylib/PoeBuildInfo.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-07-29 03:53:10
|
Revision: 2613 http://poe.svn.sourceforge.net/poe/?rev=2613&view=rev Author: rcaputo Date: 2009-07-29 03:53:01 +0000 (Wed, 29 Jul 2009) Log Message: ----------- !!! This change breaks backward compatibility on a relatively unused !!! feature. You are affected if you use ARG0 or ARG1 in a !!! POE::Component::Server::TCP ClientConnected callback. ClientArgs promised more than it could deliver, and people finally noticed. This change backs off supplying the socket in $_[ARG0], and it expands ClientArgs' arrayref into @_[ARG0..$#_]. Thanks to Michael Fowler for rt.cpan.org #47855 (which this resolves), and POE's mailing list for advice on which way this change should go. Modified Paths: -------------- trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/t/90_regression/somni-poco-server-tcp.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-08-08 04:56:35
|
Revision: 2623 http://poe.svn.sourceforge.net/poe/?rev=2623&view=rev Author: rcaputo Date: 2009-08-08 04:56:28 +0000 (Sat, 08 Aug 2009) Log Message: ----------- Move Philip Gwyn's signals test to POE::Test::Loops, so it can exercise everyone's event loops. Modified Paths: -------------- trunk/poe-test-loops/MANIFEST Added Paths: ----------- trunk/poe-test-loops/lib/POE/Test/Loops/z_leolo_wheel_run.pm Removed Paths: ------------- trunk/poe/t/90_regression/leolo-poe-wheel-run.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-08-15 06:49:25
|
Revision: 2631 http://poe.svn.sourceforge.net/poe/?rev=2631&view=rev Author: rcaputo Date: 2009-08-15 06:49:12 +0000 (Sat, 15 Aug 2009) Log Message: ----------- Remove $Id$ and $Revision$ tags. No significant code changed despite most of the distribution being touched. Modified Paths: -------------- trunk/poe/README trunk/poe/docs/Makefile trunk/poe/docs/out-out.perl trunk/poe/examples/create.perl trunk/poe/examples/fakelogin.perl trunk/poe/examples/forkbomb.perl trunk/poe/examples/names.perl trunk/poe/examples/objmaps.perl trunk/poe/examples/objsessions.perl trunk/poe/examples/packagesessions.perl trunk/poe/examples/queue.perl trunk/poe/examples/selects.perl trunk/poe/examples/sessions.perl trunk/poe/examples/signals.perl trunk/poe/examples/tcp_watermarks.perl trunk/poe/examples/thrash.perl trunk/poe/examples/watermarks.perl trunk/poe/examples/wheels2.perl trunk/poe/lib/POE/Component/Client/TCP.pm trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/lib/POE/Component.pm trunk/poe/lib/POE/Driver/SysRW.pm trunk/poe/lib/POE/Driver.pm trunk/poe/lib/POE/Filter/Block.pm trunk/poe/lib/POE/Filter/Grep.pm trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE/Filter/Line.pm trunk/poe/lib/POE/Filter/Map.pm trunk/poe/lib/POE/Filter/RecordBlock.pm trunk/poe/lib/POE/Filter/Reference.pm trunk/poe/lib/POE/Filter/Stackable.pm trunk/poe/lib/POE/Filter/Stream.pm trunk/poe/lib/POE/Filter.pm trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loader.pm trunk/poe/lib/POE/Loop/Event.pm trunk/poe/lib/POE/Loop/Gtk.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Loop/Tk.pm trunk/poe/lib/POE/Loop/TkActiveState.pm trunk/poe/lib/POE/Loop/TkCommon.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/NFA.pm trunk/poe/lib/POE/Pipe/OneWay.pm trunk/poe/lib/POE/Pipe/TwoWay.pm trunk/poe/lib/POE/Pipe.pm trunk/poe/lib/POE/Queue/Array.pm trunk/poe/lib/POE/Queue.pm trunk/poe/lib/POE/Resource/Aliases.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Extrefs.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/SIDs.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/lib/POE/Resource/Statistics.pm trunk/poe/lib/POE/Resource.pm trunk/poe/lib/POE/Resources.pm trunk/poe/lib/POE/Session.pm trunk/poe/lib/POE/Wheel/Curses.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ListenAccept.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/lib/POE/Wheel/ReadWrite.pm trunk/poe/lib/POE/Wheel/Run.pm trunk/poe/lib/POE/Wheel/SocketFactory.pm trunk/poe/lib/POE/Wheel.pm trunk/poe/lib/POE.pm trunk/poe/mylib/Devel/Null.pm trunk/poe/mylib/Makefile-5004.pm trunk/poe/mylib/Makefile-5005.pm trunk/poe/mylib/MyOtherFreezer.pm trunk/poe/mylib/PoeBuildInfo.pm trunk/poe/mylib/coverage.perl trunk/poe/mylib/cpan-test.perl trunk/poe/mylib/gen-meta.perl trunk/poe/mylib/gen-tests.perl trunk/poe/mylib/svn-log.perl trunk/poe/t/10_units/01_pod/01_pod.t trunk/poe/t/10_units/01_pod/02_pod_coverage.t trunk/poe/t/10_units/03_base/01_poe.t trunk/poe/t/10_units/03_base/03_component.t trunk/poe/t/10_units/03_base/06_loop.t trunk/poe/t/10_units/03_base/08_resource.t trunk/poe/t/10_units/03_base/11_assert_usage.t trunk/poe/t/10_units/03_base/12_assert_retval.t trunk/poe/t/10_units/03_base/13_assert_data.t trunk/poe/t/10_units/03_base/16_explicit_loop.t trunk/poe/t/10_units/03_base/17_explicit_loop_fail.t trunk/poe/t/10_units/05_filters/01_block.t trunk/poe/t/10_units/05_filters/02_grep.t trunk/poe/t/10_units/05_filters/03_http.t trunk/poe/t/10_units/05_filters/04_line.t trunk/poe/t/10_units/05_filters/05_map.t trunk/poe/t/10_units/05_filters/07_reference.t trunk/poe/t/10_units/05_filters/08_stream.t trunk/poe/t/10_units/05_filters/50_stackable.t trunk/poe/t/10_units/05_filters/99_filterchange.t trunk/poe/t/10_units/06_queues/01_array.t trunk/poe/t/10_units/07_exceptions/01_normal.t trunk/poe/t/10_units/07_exceptions/02_turn_off.t trunk/poe/t/10_units/07_exceptions/03_not_handled.t trunk/poe/t/20_resources/00_base/aliases.pm trunk/poe/t/20_resources/00_base/caller_state.pm trunk/poe/t/20_resources/00_base/events.pm trunk/poe/t/20_resources/00_base/extrefs.pm trunk/poe/t/20_resources/00_base/extrefs_gc.pm trunk/poe/t/20_resources/00_base/filehandles.pm trunk/poe/t/20_resources/00_base/sessions.pm trunk/poe/t/20_resources/00_base/sids.pm trunk/poe/t/20_resources/00_base/signals.pm trunk/poe/t/90_regression/agaran-filter-httpd.t trunk/poe/t/90_regression/averell-callback-ret.t trunk/poe/t/90_regression/broeren-win32-nbio.t trunk/poe/t/90_regression/cfedde-filter-httpd.t trunk/poe/t/90_regression/neyuki_detach.t trunk/poe/t/90_regression/rt14444-arg1.t trunk/poe/t/90_regression/rt1648-tied-stderr.t trunk/poe/t/90_regression/rt19908-merlyn-stop.t trunk/poe/t/90_regression/rt23181-sigchld-rc.t trunk/poe/t/90_regression/steinert-passed-wheel.t trunk/poe/t/90_regression/suzman_windows.t trunk/poe/t/90_regression/ton-stop-corruption.t trunk/poe/t/90_regression/whelan-dieprop.t trunk/poe/t/90_regression/whjackson-followtail.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-08-22 05:15:59
|
Revision: 2633 http://poe.svn.sourceforge.net/poe/?rev=2633&view=rev Author: rcaputo Date: 2009-08-22 05:15:52 +0000 (Sat, 22 Aug 2009) Log Message: ----------- Mainly rewrite POE::Filter::HTTPD's parser. May support get_one() now, so some tests also had to change. I hope this will resolve rt.cpan.org ticket 48802, reported by a very patient zerhash. Modified Paths: -------------- trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/t/10_units/05_filters/03_http.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <gw...@us...> - 2009-08-27 10:22:36
|
Revision: 2656 http://poe.svn.sourceforge.net/poe/?rev=2656&view=rev Author: gwyn17 Date: 2009-08-27 10:22:20 +0000 (Thu, 27 Aug 2009) Log Message: ----------- Fixes to POE::Filter::HTTPD: - RFC2616 says a body is implied if we have Content-Encoding or Content-Length; - C-E w/o C-L is an error for HTTP 1.1; - Added copious comments to justify the above; - Created ->_reset(); - If possible, include the request in an error response object; - Set ->message on an error response object; - Updated documentation. Unit tests for above. Modified Paths: -------------- trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE.pm trunk/poe/t/10_units/05_filters/03_http.t This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-08-27 23:57:00
|
Revision: 2658 http://poe.svn.sourceforge.net/poe/?rev=2658&view=rev Author: rcaputo Date: 2009-08-27 23:56:49 +0000 (Thu, 27 Aug 2009) Log Message: ----------- Set revisions for 1.020 release. Modified Paths: -------------- trunk/poe/README trunk/poe/lib/POE/Component/Client/TCP.pm trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/lib/POE/Component.pm trunk/poe/lib/POE/Driver/SysRW.pm trunk/poe/lib/POE/Driver.pm trunk/poe/lib/POE/Filter/Block.pm trunk/poe/lib/POE/Filter/Grep.pm trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE/Filter/Line.pm trunk/poe/lib/POE/Filter/Map.pm trunk/poe/lib/POE/Filter/RecordBlock.pm trunk/poe/lib/POE/Filter/Reference.pm trunk/poe/lib/POE/Filter/Stackable.pm trunk/poe/lib/POE/Filter/Stream.pm trunk/poe/lib/POE/Filter.pm trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/NFA.pm trunk/poe/lib/POE/Pipe/OneWay.pm trunk/poe/lib/POE/Pipe/TwoWay.pm trunk/poe/lib/POE/Pipe.pm trunk/poe/lib/POE/Queue/Array.pm trunk/poe/lib/POE/Queue.pm trunk/poe/lib/POE/Resource/Aliases.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Extrefs.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/SIDs.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/lib/POE/Resource/Statistics.pm trunk/poe/lib/POE/Resource.pm trunk/poe/lib/POE/Resources.pm trunk/poe/lib/POE/Session.pm trunk/poe/lib/POE/Wheel/Curses.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ListenAccept.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/lib/POE/Wheel/ReadWrite.pm trunk/poe/lib/POE/Wheel/Run.pm trunk/poe/lib/POE/Wheel/SocketFactory.pm trunk/poe/lib/POE/Wheel.pm trunk/poe/lib/POE.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-08-29 19:09:06
|
Revision: 2661 http://poe.svn.sourceforge.net/poe/?rev=2661&view=rev Author: rcaputo Date: 2009-08-29 19:08:52 +0000 (Sat, 29 Aug 2009) Log Message: ----------- Changing the version to 1.266 to eliminate indexer and packager issues. Thanks to Patterner on IRC for the reminder. Modified Paths: -------------- trunk/poe/README trunk/poe/lib/POE/Component/Client/TCP.pm trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/lib/POE/Component.pm trunk/poe/lib/POE/Driver/SysRW.pm trunk/poe/lib/POE/Driver.pm trunk/poe/lib/POE/Filter/Block.pm trunk/poe/lib/POE/Filter/Grep.pm trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE/Filter/Line.pm trunk/poe/lib/POE/Filter/Map.pm trunk/poe/lib/POE/Filter/RecordBlock.pm trunk/poe/lib/POE/Filter/Reference.pm trunk/poe/lib/POE/Filter/Stackable.pm trunk/poe/lib/POE/Filter/Stream.pm trunk/poe/lib/POE/Filter.pm trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/NFA.pm trunk/poe/lib/POE/Pipe/OneWay.pm trunk/poe/lib/POE/Pipe/TwoWay.pm trunk/poe/lib/POE/Pipe.pm trunk/poe/lib/POE/Queue/Array.pm trunk/poe/lib/POE/Queue.pm trunk/poe/lib/POE/Resource/Aliases.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Extrefs.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/SIDs.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/lib/POE/Resource/Statistics.pm trunk/poe/lib/POE/Resource.pm trunk/poe/lib/POE/Resources.pm trunk/poe/lib/POE/Session.pm trunk/poe/lib/POE/Wheel/Curses.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ListenAccept.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/lib/POE/Wheel/ReadWrite.pm trunk/poe/lib/POE/Wheel/Run.pm trunk/poe/lib/POE/Wheel/SocketFactory.pm trunk/poe/lib/POE/Wheel.pm trunk/poe/lib/POE.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-09-07 19:29:25
|
Revision: 2679 http://poe.svn.sourceforge.net/poe/?rev=2679&view=rev Author: rcaputo Date: 2009-09-07 19:29:16 +0000 (Mon, 07 Sep 2009) Log Message: ----------- Bump version for new release. Rely upon latest POE::Test::Loops. Modified Paths: -------------- trunk/poe/README trunk/poe/lib/POE/Component/Client/TCP.pm trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/lib/POE/Component.pm trunk/poe/lib/POE/Driver/SysRW.pm trunk/poe/lib/POE/Driver.pm trunk/poe/lib/POE/Filter/Block.pm trunk/poe/lib/POE/Filter/Grep.pm trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE/Filter/Line.pm trunk/poe/lib/POE/Filter/Map.pm trunk/poe/lib/POE/Filter/RecordBlock.pm trunk/poe/lib/POE/Filter/Reference.pm trunk/poe/lib/POE/Filter/Stackable.pm trunk/poe/lib/POE/Filter/Stream.pm trunk/poe/lib/POE/Filter.pm trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/NFA.pm trunk/poe/lib/POE/Pipe/OneWay.pm trunk/poe/lib/POE/Pipe/TwoWay.pm trunk/poe/lib/POE/Pipe.pm trunk/poe/lib/POE/Queue/Array.pm trunk/poe/lib/POE/Queue.pm trunk/poe/lib/POE/Resource/Aliases.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Extrefs.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/SIDs.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/lib/POE/Resource/Statistics.pm trunk/poe/lib/POE/Resource.pm trunk/poe/lib/POE/Resources.pm trunk/poe/lib/POE/Session.pm trunk/poe/lib/POE/Wheel/Curses.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ListenAccept.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/lib/POE/Wheel/ReadWrite.pm trunk/poe/lib/POE/Wheel/Run.pm trunk/poe/lib/POE/Wheel/SocketFactory.pm trunk/poe/lib/POE/Wheel.pm trunk/poe/lib/POE.pm trunk/poe/mylib/PoeBuildInfo.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-09-16 18:13:00
|
Revision: 2693 http://poe.svn.sourceforge.net/poe/?rev=2693&view=rev Author: rcaputo Date: 2009-09-16 18:12:31 +0000 (Wed, 16 Sep 2009) Log Message: ----------- Bump the version for a release. Modified Paths: -------------- trunk/poe/README trunk/poe/lib/POE/Component/Client/TCP.pm trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/lib/POE/Component.pm trunk/poe/lib/POE/Driver/SysRW.pm trunk/poe/lib/POE/Driver.pm trunk/poe/lib/POE/Filter/Block.pm trunk/poe/lib/POE/Filter/Grep.pm trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE/Filter/Line.pm trunk/poe/lib/POE/Filter/Map.pm trunk/poe/lib/POE/Filter/RecordBlock.pm trunk/poe/lib/POE/Filter/Reference.pm trunk/poe/lib/POE/Filter/Stackable.pm trunk/poe/lib/POE/Filter/Stream.pm trunk/poe/lib/POE/Filter.pm trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/NFA.pm trunk/poe/lib/POE/Pipe/OneWay.pm trunk/poe/lib/POE/Pipe/TwoWay.pm trunk/poe/lib/POE/Pipe.pm trunk/poe/lib/POE/Queue/Array.pm trunk/poe/lib/POE/Queue.pm trunk/poe/lib/POE/Resource/Aliases.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Extrefs.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/SIDs.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/lib/POE/Resource/Statistics.pm trunk/poe/lib/POE/Resource.pm trunk/poe/lib/POE/Resources.pm trunk/poe/lib/POE/Session.pm trunk/poe/lib/POE/Wheel/Curses.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ListenAccept.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/lib/POE/Wheel/ReadWrite.pm trunk/poe/lib/POE/Wheel/Run.pm trunk/poe/lib/POE/Wheel/SocketFactory.pm trunk/poe/lib/POE/Wheel.pm trunk/poe/lib/POE.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-09-23 18:19:50
|
Revision: 2698 http://poe.svn.sourceforge.net/poe/?rev=2698&view=rev Author: rcaputo Date: 2009-09-23 18:19:23 +0000 (Wed, 23 Sep 2009) Log Message: ----------- Fix a hanging problem on MSWin32, and bump the version for release. Modified Paths: -------------- trunk/poe/README trunk/poe/lib/POE/Component/Client/TCP.pm trunk/poe/lib/POE/Component/Server/TCP.pm trunk/poe/lib/POE/Component.pm trunk/poe/lib/POE/Driver/SysRW.pm trunk/poe/lib/POE/Driver.pm trunk/poe/lib/POE/Filter/Block.pm trunk/poe/lib/POE/Filter/Grep.pm trunk/poe/lib/POE/Filter/HTTPD.pm trunk/poe/lib/POE/Filter/Line.pm trunk/poe/lib/POE/Filter/Map.pm trunk/poe/lib/POE/Filter/RecordBlock.pm trunk/poe/lib/POE/Filter/Reference.pm trunk/poe/lib/POE/Filter/Stackable.pm trunk/poe/lib/POE/Filter/Stream.pm trunk/poe/lib/POE/Filter.pm trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Loop/IO_Poll.pm trunk/poe/lib/POE/Loop/PerlSignals.pm trunk/poe/lib/POE/Loop/Select.pm trunk/poe/lib/POE/Loop.pm trunk/poe/lib/POE/NFA.pm trunk/poe/lib/POE/Pipe/OneWay.pm trunk/poe/lib/POE/Pipe/TwoWay.pm trunk/poe/lib/POE/Pipe.pm trunk/poe/lib/POE/Queue/Array.pm trunk/poe/lib/POE/Queue.pm trunk/poe/lib/POE/Resource/Aliases.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/Extrefs.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/lib/POE/Resource/SIDs.pm trunk/poe/lib/POE/Resource/Sessions.pm trunk/poe/lib/POE/Resource/Signals.pm trunk/poe/lib/POE/Resource/Statistics.pm trunk/poe/lib/POE/Resource.pm trunk/poe/lib/POE/Resources.pm trunk/poe/lib/POE/Session.pm trunk/poe/lib/POE/Wheel/Curses.pm trunk/poe/lib/POE/Wheel/FollowTail.pm trunk/poe/lib/POE/Wheel/ListenAccept.pm trunk/poe/lib/POE/Wheel/ReadLine.pm trunk/poe/lib/POE/Wheel/ReadWrite.pm trunk/poe/lib/POE/Wheel/Run.pm trunk/poe/lib/POE/Wheel/SocketFactory.pm trunk/poe/lib/POE/Wheel.pm trunk/poe/lib/POE.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rc...@us...> - 2009-09-24 17:27:44
|
Revision: 2700 http://poe.svn.sourceforge.net/poe/?rev=2700&view=rev Author: rcaputo Date: 2009-09-24 17:27:35 +0000 (Thu, 24 Sep 2009) Log Message: ----------- Dispatch I/O synchronously rather than enqueuing and dequeuing events. This saves a lot of time, but it changes the relative timing of I/O dispatch. If it turns out to be significant, then we may have to roll it back. Modified Paths: -------------- trunk/poe/lib/POE/Kernel.pm trunk/poe/lib/POE/Resource/Events.pm trunk/poe/lib/POE/Resource/FileHandles.pm trunk/poe/t/20_resources/00_base/filehandles.pm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |