poe-commits Mailing List for POE: Perl Object Environment (Page 92)
Brought to you by:
rcaputo
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(75) |
Jun
(48) |
Jul
(50) |
Aug
(38) |
Sep
(68) |
Oct
(46) |
Nov
(29) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(12) |
Feb
(18) |
Mar
(10) |
Apr
(11) |
May
(42) |
Jun
(55) |
Jul
(40) |
Aug
(11) |
Sep
(15) |
Oct
(7) |
Nov
(53) |
Dec
(14) |
2004 |
Jan
(59) |
Feb
(18) |
Mar
(3) |
Apr
(38) |
May
(15) |
Jun
(12) |
Jul
(26) |
Aug
(4) |
Sep
(64) |
Oct
(52) |
Nov
(85) |
Dec
(16) |
2005 |
Jan
(17) |
Feb
(10) |
Mar
(4) |
Apr
(40) |
May
(27) |
Jun
(24) |
Jul
(8) |
Aug
(9) |
Sep
(11) |
Oct
(7) |
Nov
(10) |
Dec
(21) |
2006 |
Jan
(3) |
Feb
(10) |
Mar
(36) |
Apr
(31) |
May
(27) |
Jun
(30) |
Jul
(6) |
Aug
(68) |
Sep
(56) |
Oct
(8) |
Nov
(13) |
Dec
(2) |
2007 |
Jan
(10) |
Feb
(4) |
Mar
(9) |
Apr
(3) |
May
(2) |
Jun
(1) |
Jul
(16) |
Aug
(20) |
Sep
(4) |
Oct
(17) |
Nov
(3) |
Dec
(10) |
2008 |
Jan
(7) |
Feb
(7) |
Mar
(31) |
Apr
(13) |
May
(26) |
Jun
(28) |
Jul
(21) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
(4) |
Dec
(5) |
2009 |
Jan
(5) |
Feb
(62) |
Mar
(41) |
Apr
(9) |
May
(20) |
Jun
(12) |
Jul
(55) |
Aug
(48) |
Sep
(42) |
Oct
(47) |
Nov
(2) |
Dec
(14) |
2010 |
Jan
(26) |
Feb
(26) |
Mar
(34) |
Apr
(32) |
May
(3) |
Jun
(5) |
Jul
(15) |
Aug
(7) |
Sep
(3) |
Oct
|
Nov
|
Dec
|
From: <rc...@us...> - 2002-05-11 12:52:46
|
Update of /cvsroot/poe/poe/POE In directory usw-pr-cvs1:/tmp/cvs-serv6293/POE Modified Files: Kernel.pm Session.pm Log Message: Deprecate _signal event, and by association using _default to handle signals. Index: Kernel.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Kernel.pm,v retrieving revision 1.177 retrieving revision 1.178 diff -C2 -d -r1.177 -r1.178 *** Kernel.pm 10 May 2002 12:14:40 -0000 1.177 --- Kernel.pm 11 May 2002 12:52:43 -0000 1.178 *************** *** 98,103 **** my @kr_signaled_sessions; ! my $kr_signal_total_implicits; ! my $kr_signal_total_explicits; my $kr_signal_handled_implicitly; my $kr_signal_handled_explicitly; --- 98,102 ---- my @kr_signaled_sessions; ! my $kr_signal_total_handled; my $kr_signal_handled_implicitly; my $kr_signal_handled_explicitly; *************** *** 749,753 **** sub sig_handled { my $self = shift; ! $kr_signal_total_explicits = 1; $kr_signal_handled_explicitly = 1; } --- 748,752 ---- sub sig_handled { my $self = shift; ! $kr_signal_total_handled = 1; $kr_signal_handled_explicitly = 1; } *************** *** 1029,1034 **** # Step 0: Reset per-signal structures. ! undef $kr_signal_total_implicits; ! undef $kr_signal_total_explicits; $kr_signal_type = $_signal_types{$signal} || SIGTYPE_BENIGN; undef @kr_signaled_sessions; --- 1028,1032 ---- # Step 0: Reset per-signal structures. ! undef $kr_signal_total_handled; $kr_signal_type = $_signal_types{$signal} || SIGTYPE_BENIGN; undef @kr_signaled_sessions; *************** *** 1312,1316 **** elsif ($type & (ET_SIGNAL | ET_SIGNAL_EXPLICIT | ET_SIGNAL_COMPATIBLE)) { push @kr_signaled_sessions, $session; ! $kr_signal_total_implicits += !!$return; $kr_signal_handled_implicitly += !!$return; --- 1310,1314 ---- elsif ($type & (ET_SIGNAL | ET_SIGNAL_EXPLICIT | ET_SIGNAL_COMPATIBLE)) { push @kr_signaled_sessions, $session; ! $kr_signal_total_handled += !!$return; $kr_signal_handled_implicitly += !!$return; *************** *** 1324,1330 **** if ($type & ET_SIGNAL) { if ( ($kr_signal_type & SIGTYPE_NONMASKABLE) or ! ( $kr_signal_type & SIGTYPE_TERMINAL and ! !($kr_signal_total_explicits || $kr_signal_total_implicits) ! ) ) { foreach my $dead_session (@kr_signaled_sessions) { --- 1322,1326 ---- if ($type & ET_SIGNAL) { if ( ($kr_signal_type & SIGTYPE_NONMASKABLE) or ! ( $kr_signal_type & SIGTYPE_TERMINAL and !$kr_signal_total_handled ) ) { foreach my $dead_session (@kr_signaled_sessions) { *************** *** 4230,4237 **** Signal events are dispatched to sessions that have registered interest in them via the C<sig()> method. For backward compatibility, every ! other session will receive a _signal event after that, but this will ! be deprecated in the future. The C<sig()> events and _signal events ! contain the same parameters. L<POE::Session> covers signal events in ! more details. Signal events propagate to child sessions before their parents. This --- 4226,4234 ---- Signal events are dispatched to sessions that have registered interest in them via the C<sig()> method. For backward compatibility, every ! other session will receive a _signal event after that. The _signal ! event is scheduled to be removed in version 0.22, so please use ! C<sig()> to register signal handlers instead. In the meantime, ! _signal events contain the same parameters as ones generated by ! C<sig()>. L<POE::Session> covers signal events in more details. Signal events propagate to child sessions before their parents. This Index: Session.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Session.pm,v retrieving revision 1.74 retrieving revision 1.75 diff -C2 -d -r1.74 -r1.75 *** Session.pm 5 Feb 2002 01:31:55 -0000 1.74 --- Session.pm 11 May 2002 12:52:43 -0000 1.75 *************** *** 1566,1574 **** event's, with the exception of C<STATE>, which becomes C<_default>. ! B<Beware!> A C<_default> handler will catch unhandled signal events. ! In this case, C<_default>'s return value is used to determine whether ! the signal has been handled. If any C<_default> handler always ! returns true, then it will catch all but the nonmaskable signals, and ! only SIGKILL may stop them. L<POE::Kernel> discusses signal handlers in "Signal Watcher Methods". --- 1566,1573 ---- event's, with the exception of C<STATE>, which becomes C<_default>. ! It is highly recommended that C<_default> handlers always return ! false. C<_default> handlers will often catch signals, so they must ! return false if the signals are expected to stop a program. Otherwise ! only SIGKILL will work. L<POE::Kernel> discusses signal handlers in "Signal Watcher Methods". *************** *** 1585,1606 **** =item _signal ! C<_signal> is a session's default signal handler. Every signal that ! isn't mapped to a specific state will be delivered to this one. C<ARG0> contains the signal's name as it appears in Perl's %SIG hash. ! That is, it's the root name of the signal without the SIG prefix. Unhandled C<_signal> events will be forwarded to C<_default>. In this ! case, the C<_default> handler's return value becomes significant. ! It's possible to accidentally write unkillable programs this way. ! If C<_signal> and C<_default> handlers don't exist, then signals will always be unhandled. ! L<POE::Kernel>'s "Signal Watcher Methods" section is recommended reading before using C<_signal> or C<_default>. It discusses the different signal levels, the mechanics of signal propagation, and why ! it's always important to return an explicit value from a signal ! handler, among other things. =item _start --- 1584,1613 ---- =item _signal ! C<_signal> is a session's default signal handler. Every signal not ! specified with C<sig()> will be delivered as a C<_signal> event. ! ! The C<_signal> event is deprecated as of POE 0.1901. Programs should ! use C<sig()> to generate explicit events for the signals they are ! interested in. ! ! In all signal events... C<ARG0> contains the signal's name as it appears in Perl's %SIG hash. ! That is, it is the root name of the signal without the SIG prefix. Unhandled C<_signal> events will be forwarded to C<_default>. In this ! case, the C<_default> handler's return value becomes significant. Be ! careful: It's possible to accidentally write unkillable programs this ! way. This is one of the reasons why C<_signal> is deprecated, as are ! signal handler return values. ! If C<_signal> and C<_default> handlers do not exist, then signals will always be unhandled. ! The "Signal Watcher Methods" section in L<POE::Kernel> is recommended reading before using C<_signal> or C<_default>. It discusses the different signal levels, the mechanics of signal propagation, and why ! it is important to return an explicit value from a signal handler, ! among other things. =item _start |
From: <rc...@us...> - 2002-05-10 12:14:43
|
Update of /cvsroot/poe/poe/POE In directory usw-pr-cvs1:/tmp/cvs-serv7654/POE Modified Files: Kernel.pm Log Message: Alter ssid macro so it won't expand in a comment. Index: Kernel.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Kernel.pm,v retrieving revision 1.176 retrieving revision 1.177 diff -C2 -d -r1.176 -r1.177 *** Kernel.pm 10 May 2002 01:36:13 -0000 1.176 --- Kernel.pm 10 May 2002 12:14:40 -0000 1.177 *************** *** 1318,1322 **** if ($kr_signal_handled_implicitly) { # -><- DEPRECATION WARNING GOES HERE ! # warn( {% ssid %} . " implicitly handled SIG$etc->[0]\n" ); } } --- 1318,1322 ---- if ($kr_signal_handled_implicitly) { # -><- DEPRECATION WARNING GOES HERE ! # warn( { % ssid % } . " implicitly handled SIG$etc->[0]\n" ); } } |
From: <rc...@us...> - 2002-05-10 02:00:37
|
Update of /cvsroot/poe/poe/lib In directory usw-pr-cvs1:/tmp/cvs-serv22317/lib Modified Files: deptest.perl Log Message: Remove mandatory tracing on Solaris since nobody has reported the problem it was supposed to help track down for a while. Index: deptest.perl =================================================================== RCS file: /cvsroot/poe/poe/lib/deptest.perl,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** deptest.perl 26 Mar 2002 00:20:37 -0000 1.18 --- deptest.perl 10 May 2002 01:40:26 -0000 1.19 *************** *** 2,5 **** --- 2,7 ---- # $Id$ + ############################################################################### + use strict; use Config qw(%Config); *************** *** 10,25 **** use lib qw(blib blib/lib); ! # Enable verbose testing if this is running on solaris, because ! # solaris' CPAN tester's machine has trouble finding some modules ! # which do exist. ! BEGIN { ! if ($^O eq 'solaris') { ! eval 'sub TRACE_GATHER () { 1 }'; ! } ! else { ! eval 'sub TRACE_GATHER () { 0 }'; ! } ! }; sub TRACE_SECTION () { 1 } # lets the installer know what's going on open STDERR_HOLD, '>&STDERR' or die "cannot save STDERR: $!"; --- 12,31 ---- use lib qw(blib blib/lib); ! ## Enable verbose testing if this is running on solaris, because ! ## solaris' CPAN tester's machine has trouble finding some modules ! ## which do exist. ! #BEGIN { ! # if ($^O eq 'solaris') { ! # eval 'sub TRACE_GATHER () { 1 }'; ! # } ! # else { ! # eval 'sub TRACE_GATHER () { 0 }'; ! # } ! #}; ! ! sub TRACE_GATHER () { 0 } # traces the dependency gathering process sub TRACE_SECTION () { 1 } # lets the installer know what's going on + + # Save a copy of STDOUT and STDERR so they may be redirected. open STDERR_HOLD, '>&STDERR' or die "cannot save STDERR: $!"; |
From: <rc...@us...> - 2002-05-10 02:00:36
|
Update of /cvsroot/poe/poe/POE/Wheel In directory usw-pr-cvs1:/tmp/cvs-serv21636/POE/Wheel Modified Files: FollowTail.pm ListenAccept.pm ReadWrite.pm SocketFactory.pm Log Message: Begin the next phase of FooState parameter deprecation in the POE wheels. Now any use of FooState causes a carp. Index: FollowTail.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Wheel/FollowTail.pm,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** FollowTail.pm 10 Jan 2002 20:39:45 -0000 1.31 --- FollowTail.pm 10 May 2002 01:39:04 -0000 1.32 *************** *** 59,68 **** # STATE-EVENT if (exists $params{InputState}) { if (exists $params{InputEvent}) { - carp "InputEvent takes precedence over deprecated InputState"; delete $params{InputState}; } else { - # deprecation warning goes here $params{InputEvent} = delete $params{InputState}; } --- 59,67 ---- # STATE-EVENT if (exists $params{InputState}) { + carp "InputState is deprecated. Use InputEvent"; if (exists $params{InputEvent}) { delete $params{InputState}; } else { $params{InputEvent} = delete $params{InputState}; } *************** *** 71,80 **** # STATE-EVENT if (exists $params{ErrorState}) { if (exists $params{ErrorEvent}) { - carp "ErrorEvent takes precedence over deprecated ErrorState"; delete $params{ErrorState}; } else { - # deprecation warning goes here $params{ErrorEvent} = delete $params{ErrorState}; } --- 70,78 ---- # STATE-EVENT if (exists $params{ErrorState}) { + carp "ErrorState is deprecated. Use ErrorEvent"; if (exists $params{ErrorEvent}) { delete $params{ErrorState}; } else { $params{ErrorEvent} = delete $params{ErrorState}; } *************** *** 295,299 **** # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! # deprecation warning goes here $name = $1 . 'Event'; } --- 293,297 ---- # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! carp "$name is deprecated. Use $1Event"; $name = $1 . 'Event'; } Index: ListenAccept.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Wheel/ListenAccept.pm,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** ListenAccept.pm 10 Jan 2002 20:39:45 -0000 1.24 --- ListenAccept.pm 10 May 2002 01:39:04 -0000 1.25 *************** *** 35,44 **** # STATE-EVENT if (exists $params{AcceptState}) { if (exists $params{AcceptEvent}) { - carp "AcceptEvent takes precedence over deprecated AcceptState"; delete $params{AcceptState}; } else { - # deprecation warning goes here $params{AcceptEvent} = delete $params{AcceptState}; } --- 35,43 ---- # STATE-EVENT if (exists $params{AcceptState}) { + carp "AcceptState is deprecated. Use AcceptEvent"; if (exists $params{AcceptEvent}) { delete $params{AcceptState}; } else { $params{AcceptEvent} = delete $params{AcceptState}; } *************** *** 47,56 **** # STATE-EVENT if (exists $params{ErrorState}) { if (exists $params{ErrorEvent}) { - carp "ErrorEvent takes precedence over deprecated ErrorState"; delete $params{ErrorState}; } else { - # deprecation warning goes here $params{ErrorEvent} = delete $params{ErrorState}; } --- 46,54 ---- # STATE-EVENT if (exists $params{ErrorState}) { + carp "ErrorState is deprecated. Use ErrorEvent"; if (exists $params{ErrorEvent}) { delete $params{ErrorState}; } else { $params{ErrorEvent} = delete $params{ErrorState}; } *************** *** 84,88 **** # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! # deprecation warning goes here $name = $1 . 'Event'; } --- 82,86 ---- # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! carp "$name is deprecated. Use $1Event"; $name = $1 . 'Event'; } Index: ReadWrite.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Wheel/ReadWrite.pm,v retrieving revision 1.58 retrieving revision 1.59 diff -C2 -d -r1.58 -r1.59 *** ReadWrite.pm 10 Jan 2002 20:39:45 -0000 1.58 --- ReadWrite.pm 10 May 2002 01:39:04 -0000 1.59 *************** *** 84,93 **** # STATE-EVENT if (exists $params{HighState}) { if (exists $params{HighEvent}) { - carp "HighEvent parameter takes precedence over deprecated HighState"; delete $params{HighState}; } else { - # deprecation warning goes here $params{HighEvent} = delete $params{HighState}; } --- 84,92 ---- # STATE-EVENT if (exists $params{HighState}) { + carp "HighState is deprecated. Use HighEvent"; if (exists $params{HighEvent}) { delete $params{HighState}; } else { $params{HighEvent} = delete $params{HighState}; } *************** *** 96,105 **** # STATE-EVENT if (exists $params{LowState}) { if (exists $params{LowEvent}) { - carp "LowEvent parameter takes precedence over deprecated LowState"; delete $params{LowState}; } else { - # deprecation warning goes here $params{LowEvent} = delete $params{LowState}; } --- 95,103 ---- # STATE-EVENT if (exists $params{LowState}) { + carp "LowState is deprecated. Use LowEvent."; if (exists $params{LowEvent}) { delete $params{LowState}; } else { $params{LowEvent} = delete $params{LowState}; } *************** *** 108,117 **** # STATE-EVENT if (exists $params{InputState}) { if (exists $params{InputEvent}) { - carp "InputEvent takes precedence over deprecated InputState"; delete $params{InputState}; } else { - # deprecation warning goes here $params{InputEvent} = delete $params{InputState}; } --- 106,114 ---- # STATE-EVENT if (exists $params{InputState}) { + carp "InputState is deprecated. Use InputEvent"; if (exists $params{InputEvent}) { delete $params{InputState}; } else { $params{InputEvent} = delete $params{InputState}; } *************** *** 120,129 **** # STATE-EVENT if (exists $params{ErrorState}) { if (exists $params{ErrorEvent}) { - carp "ErrorEvent takes precedence over deprecated ErrorState"; delete $params{ErrorState}; } else { - # deprecation warning goes here $params{ErrorEvent} = delete $params{ErrorState}; } --- 117,125 ---- # STATE-EVENT if (exists $params{ErrorState}) { + carp "ErrorState is deprecated. Use ErrorEvent"; if (exists $params{ErrorEvent}) { delete $params{ErrorState}; } else { $params{ErrorEvent} = delete $params{ErrorState}; } *************** *** 132,141 **** # STATE-EVENT if (exists $params{FlushedState}) { if (exists $params{FlushedEvent}) { - carp "FlushedEvent takes precedence over deprecated FlushedState"; delete $params{FlushedState}; } else { - # deprecation warning goes here $params{FlushedEvent} = delete $params{FlushedState}; } --- 128,136 ---- # STATE-EVENT if (exists $params{FlushedState}) { + carp "FlushedState is deprecated. Use FlushedEvent"; if (exists $params{FlushedEvent}) { delete $params{FlushedState}; } else { $params{FlushedEvent} = delete $params{FlushedState}; } *************** *** 397,401 **** # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! # deprecation warning goes here $name = $1 . 'Event'; } --- 392,396 ---- # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! carp "$name is deprecated. Use $1Event"; $name = $1 . 'Event'; } Index: SocketFactory.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Wheel/SocketFactory.pm,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** SocketFactory.pm 25 Feb 2002 06:02:58 -0000 1.54 --- SocketFactory.pm 10 May 2002 01:39:04 -0000 1.55 *************** *** 260,264 **** # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! # deprecation warning goes here $name = $1 . 'Event'; } --- 260,265 ---- # STATE-EVENT if ($name =~ /^(.*?)State$/) { ! my $pkg = ref($self); ! carp "$name is deprecated. Use $1Event"; $name = $1 . 'Event'; } *************** *** 266,286 **** if ($name eq 'SuccessEvent') { if (defined $event) { ! if (ref($event) eq 'CODE') { ! carp( "using a coderef for SuccessEvent (or SuccessState) is " . ! "deprecated (and will go away after version 0.13)" ! ); ! $poe_kernel->state ! ( $self->[MY_EVENT_SUCCESS] = $self . ' -> success', ! $event ! ); ! $self->[MY_MINE_SUCCESS] = 'yes'; ! } ! else { ! if (ref($event) ne '') { ! carp "Strange reference used as SuccessEvent"; ! } ! $self->[MY_EVENT_SUCCESS] = $event; ! undef $self->[MY_MINE_SUCCESS]; } } else { --- 267,275 ---- if ($name eq 'SuccessEvent') { if (defined $event) { ! if (ref($event)) { ! carp "reference for SuccessEvent will be treated as an event name" } + $self->[MY_EVENT_SUCCESS] = $event; + undef $self->[MY_MINE_SUCCESS]; } else { *************** *** 290,310 **** elsif ($name eq 'FailureEvent') { if (defined $event) { ! if (ref($event) eq 'CODE') { ! carp( "using a coderef for FailureEvent (or FailureState) is " . ! "deprecated (and will go away after version 0.13)" ! ); ! $poe_kernel->state ! ( $self->[MY_EVENT_FAILURE] = $self . ' -> failure', ! $event ! ); ! $self->[MY_MINE_FAILURE] = 'yes'; ! } ! else { ! if (ref($event) ne '') { ! carp "Strange reference used as FailureEvent event (ignored)" ! } ! $self->[MY_EVENT_FAILURE] = $event; ! undef $self->[MY_MINE_FAILURE]; } } else { --- 279,287 ---- elsif ($name eq 'FailureEvent') { if (defined $event) { ! if (ref($event)) { ! carp "reference for FailureEvent will be treated as an event name"; } + $self->[MY_EVENT_FAILURE] = $event; + undef $self->[MY_MINE_FAILURE]; } else { *************** *** 361,370 **** # STATE-EVENT if (exists $params{SuccessState}) { if (exists $params{SuccessEvent}) { - carp "SuccessEvent takes precedence over deprecated SuccessState"; delete $params{SuccessState}; } else { - # deprecation warning goes here $params{SuccessEvent} = delete $params{SuccessState}; } --- 338,347 ---- # STATE-EVENT if (exists $params{SuccessState}) { + carp "SuccessState is deprecated. Use SuccessEvent"; + if (exists $params{SuccessEvent}) { delete $params{SuccessState}; } else { $params{SuccessEvent} = delete $params{SuccessState}; } *************** *** 373,382 **** # STATE-EVENT if (exists $params{FailureState}) { if (exists $params{FailureEvent}) { - carp "FailureEvent takes precedence over deprecated FailureState"; delete $params{FailureState}; } else { - # deprecation warning goes here $params{FailureEvent} = delete $params{FailureState}; } --- 350,358 ---- # STATE-EVENT if (exists $params{FailureState}) { + carp "FailureState is deprecated. Use FailureEvent"; if (exists $params{FailureEvent}) { delete $params{FailureState}; } else { $params{FailureEvent} = delete $params{FailureState}; } |
From: <rc...@us...> - 2002-05-10 02:00:36
|
Update of /cvsroot/poe/poe/POE In directory usw-pr-cvs1:/tmp/cvs-serv20532/POE Modified Files: Kernel.pm Log Message: Make TRACE_ and ASSERT_FOO output more friendly. Add sig_handled() and set things in motion for implicit signal handling deprecations. Document sig_handled() and finish documenting the changed signal handling semantics. Index: Kernel.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Kernel.pm,v retrieving revision 1.175 retrieving revision 1.176 diff -C2 -d -r1.175 -r1.176 *** Kernel.pm 12 Apr 2002 21:02:31 -0000 1.175 --- Kernel.pm 10 May 2002 01:36:13 -0000 1.176 *************** *** 98,102 **** my @kr_signaled_sessions; ! my $kr_signal_handled; my $kr_signal_type; --- 98,105 ---- my @kr_signaled_sessions; ! my $kr_signal_total_implicits; ! my $kr_signal_total_explicits; ! my $kr_signal_handled_implicitly; ! my $kr_signal_handled_explicitly; my $kr_signal_type; *************** *** 367,375 **** macro sid (<session>) { ! "session " . <session>->ID . " (<session>)" } macro ssid { ! "session " . $session->ID } --- 370,386 ---- macro sid (<session>) { ! "session " . <session>->ID . " (" . ! ( (keys %{$kr_sessions{<session>}->[SS_ALIASES]}) ! ? join(", ", keys(%{$kr_sessions{<session>}->[SS_ALIASES]}) ) ! : <session> ! ). ")" } macro ssid { ! "session " . $session->ID . " (" . ! ( (keys %{$kr_sessions{$session}->[SS_ALIASES]}) ! ? join(", ", keys(%{$kr_sessions{$session}->[SS_ALIASES]}) ) ! : $session ! ). ")" } *************** *** 732,735 **** --- 743,756 ---- } + # Public interface for flagging signals as handled. This will replace + # the handlers' return values as an implicit flag. Returns undef so + # it may be used as the last function in an event handler. + + sub sig_handled { + my $self = shift; + $kr_signal_total_explicits = 1; + $kr_signal_handled_explicitly = 1; + } + #============================================================================== # KERNEL *************** *** 1008,1012 **** # Step 0: Reset per-signal structures. ! undef $kr_signal_handled; $kr_signal_type = $_signal_types{$signal} || SIGTYPE_BENIGN; undef @kr_signaled_sessions; --- 1029,1034 ---- # Step 0: Reset per-signal structures. ! undef $kr_signal_total_implicits; ! undef $kr_signal_total_explicits; $kr_signal_type = $_signal_types{$signal} || SIGTYPE_BENIGN; undef @kr_signaled_sessions; *************** *** 1089,1092 **** --- 1111,1121 ---- $kr_active_session = $session; + # Clear the implicit/explicit signal handler flags for this event + # dispatch. We'll use them afterward to carp at the user if they + # handled something implicitly but not explicitly. + + undef $kr_signal_handled_implicitly; + undef $kr_signal_handled_explicitly; + # Dispatch the event, at long last. my $return = *************** *** 1199,1208 **** my $index = @kr_events; while ( $index-- && ! ( $kr_sessions{$session}->[SS_EVCOUNT] or ! $kr_sessions{$session}->[SS_POST_COUNT] ) ) { ! if ( $kr_events[$index]->[ST_SESSION] == $session or ! $kr_events[$index]->[ST_SOURCE] == $session ) { {% ses_refcount_dec2 $kr_events[$index]->[ST_SESSION], SS_EVCOUNT %} --- 1228,1237 ---- my $index = @kr_events; while ( $index-- && ! ( $kr_sessions{$session}->[SS_EVCOUNT] ! or $kr_sessions{$session}->[SS_POST_COUNT] ) ) { ! if ( $kr_events[$index]->[ST_SESSION] == $session ! or $kr_events[$index]->[ST_SOURCE] == $session ) { {% ses_refcount_dec2 $kr_events[$index]->[ST_SESSION], SS_EVCOUNT %} *************** *** 1283,1291 **** elsif ($type & (ET_SIGNAL | ET_SIGNAL_EXPLICIT | ET_SIGNAL_COMPATIBLE)) { push @kr_signaled_sessions, $session; ! $kr_signal_handled += !!$return; if ($type & ET_SIGNAL) { if ( ($kr_signal_type & SIGTYPE_NONMASKABLE) or ! ($kr_signal_type & SIGTYPE_TERMINAL and !$kr_signal_handled) ) { foreach my $dead_session (@kr_signaled_sessions) { --- 1312,1330 ---- elsif ($type & (ET_SIGNAL | ET_SIGNAL_EXPLICIT | ET_SIGNAL_COMPATIBLE)) { push @kr_signaled_sessions, $session; ! $kr_signal_total_implicits += !!$return; ! $kr_signal_handled_implicitly += !!$return; ! ! unless ($kr_signal_handled_explicitly) { ! if ($kr_signal_handled_implicitly) { ! # -><- DEPRECATION WARNING GOES HERE ! # warn( {% ssid %} . " implicitly handled SIG$etc->[0]\n" ); ! } ! } if ($type & ET_SIGNAL) { if ( ($kr_signal_type & SIGTYPE_NONMASKABLE) or ! ( $kr_signal_type & SIGTYPE_TERMINAL and ! !($kr_signal_total_explicits || $kr_signal_total_implicits) ! ) ) { foreach my $dead_session (@kr_signaled_sessions) { *************** *** 1730,1734 **** if (TRACE_EVENTS) { # include ! warn "}}} enqueuing event '$event' for ", {% ssid %}, " at $time\n"; } # include --- 1769,1775 ---- if (TRACE_EVENTS) { # include ! warn( "}}} enqueuing event '$event' from session ", $source_session->ID, ! " to ", {% ssid %}, " at $time" ! ); } # include *************** *** 1865,1868 **** --- 1906,1910 ---- my $session = {% alias_resolve $destination %}; + {% test_resolve $destination, $session %} *************** *** 3063,3067 **** # Return whatever can be found. ! return grep {$kr_aliases{$_} == $search_session} keys %kr_aliases; } --- 3105,3109 ---- # Return whatever can be found. ! return keys %{$kr_sessions{$search_session}->[SS_ALIASES]}; } *************** *** 3418,3422 **** Signal watcher and generator methods: ! # Generate an event when a particular signal arrives. $kernel->sig( $signal_name, $event ); --- 3460,3464 ---- Signal watcher and generator methods: ! # Watch for a signal, and generate an event when it arrives. $kernel->sig( $signal_name, $event ); *************** *** 3424,3427 **** --- 3466,3472 ---- $kernel->sig( $signal_name ); + # Handle a signal, preventing the program from terminating. + $kernel->sig_handled(); + # Post a signal through POE rather than through the underlying OS. # This only works within the same process. *************** *** 4181,4217 **** =head2 Signal Watcher Methods ! Sessions always receive events for signals. By default, signals are ! sent as _signal events. Signal "watchers" just map particular signals ! to events other than _signal. ! ! The default _signal event is covered in more detail in ! L<POE::Session>, along with the other standard events. ! ! Signal watchers do not prevent sessions from spontaneously stopping. ! Perl's signal handling is not safe by itself, and while POE tries its ! best to avoid signal problems, they will occur. The Event module ! implements safe signals, and POE will take advantage of them when ! Event is used before it. ! Signal events propagate from a session's children up to it. This ! ensures that the leaves of a session's family tree are signalled ! before branches, and so on up to it. By the time a session receives a ! signal, all its descendents already have. The Kernel acts as the ancestor of every session. Signalling it, as the operating system does, propagates signal events to every session. ! It's possible to post fictitious signals from within POE. These are ! injected into the queue as if they came from the underlying operating ! system, but they are not limited to the signals that the system ! recognizes. POE uses fictitious signals to notify every session about ! certain global events. ! Sessions that don't handle signal events may incur side effects. ! Event handlers tell the Kernel that they've handled a signal by ! returning true. The Kernel will consider a signal unhandled if its ! event handler returns false or doesn't exist. Either way, the signal ! will continue propagating up the ancestor tree. There are three signal levels. They are listed from least to most --- 4226,4278 ---- =head2 Signal Watcher Methods ! First some general notes about signal events and handling them. ! Signal events are dispatched to sessions that have registered interest ! in them via the C<sig()> method. For backward compatibility, every ! other session will receive a _signal event after that, but this will ! be deprecated in the future. The C<sig()> events and _signal events ! contain the same parameters. L<POE::Session> covers signal events in ! more details. ! Signal events propagate to child sessions before their parents. This ! ensures that leaves of the parent/child tree are signaled first. By ! the time a session receives a signal, all its descendents already ! have. The Kernel acts as the ancestor of every session. Signalling it, as the operating system does, propagates signal events to every session. ! It is possible to post fictitious signals from within POE. These are ! injected into the queue as if they came from the operating system, but ! they are not limited to signals that the system recognizes. POE uses ! fictitious signals to notify every session about certain global ! events, such as when a user interface has been destroyed. ! Sessions that do not handle signal events may incur side effects. In ! particular, some signals are "terminal", in that they terminate a ! program if they are not handled. Many of the signals that usually ! stop a program in UNIX are terminal in POE. ! ! POE also recognizes "non-maskable" signals. These will terminate a ! program even when they are handled. The signal that indicates user ! interface destruction is just such a non-maskable signal. ! ! Event handlers use C<sig_handled()> to tell POE when a signal has been ! handled. Some unhandled signals will terminate a program. Handling ! them is important if that is not desired. ! ! Event handlers can also implicitly tell POE when a signal has been ! handled, simply by returning some true value. This is deprecated, ! however, because it has been the source of constant trouble in the ! past. Please use C<sig_handled()> in its place. ! ! Handled signals will continue to propagate through the parent/child ! hierarchy. ! ! Signal handling in Perl is not safe by itself. POE is written to ! avoid as many signal problems as it can, but they still may occur. ! SIGCHLD is a special exception: POE polls for child process exits ! using waitpid() instead of a signal handler. Spawning child processes ! should be completely safe. There are three signal levels. They are listed from least to most *************** *** 4222,4248 **** =item benign ! Benign signals just notify sessions that signals have been caught. ! They have no side effects if they aren't handled. =item terminal ! Terminal signals will stop any session that doesn't handle them. The ! terminal system signals are: HUP, INT, KILL, QUIT and TERM. There is ! also one terminal fictitious signal, IDLE, which is used to notify ! leftover sessions that the program has run out of things to do. =item nonmaskable Nonmaskable signals are similar to terminal signals, but they stop a ! session regardless of its handler's return value. There are two ! nonmaskable signals, both of which are fictitious: ! ZOMBIE is fired if the terminal signal IDLE did not wake anything up; ! it's used to stop the remaining "zombie" sessions so that an inactive ! program will exit. ! UIDESTROY is fired when a program's main or top-level widget has been ! destroyed. It's used to shut down programs when their interfaces have ! been closed. =back --- 4283,4316 ---- =item benign ! Benign signals just notify sessions that signals have been received. ! They have no side effects if they are not handled. =item terminal ! Terminal signal may stop a program if they go unhandled. If any event ! handler calls C<sig_handled()>, however, then the program will ! continue to live. ! ! In the past, only sessions that handled signals would survive. All ! others would be terminated. This led to inconsistent states when some ! programs were signaled. ! ! The terminal system signals are: HUP, INT, KILL, QUIT and TERM. There ! is also one terminal fictitious signal, IDLE, which is used to notify ! leftover sessions when a program has run out of things to do. =item nonmaskable Nonmaskable signals are similar to terminal signals, but they stop a ! program regardless whether it has been handled. POE implements two ! nonmaskable signals, both of which are fictitious. ! ZOMBIE is fired if the terminal signal IDLE did not wake anything up. ! It is used to stop the remaining "zombie" sessions so that an inactive ! program will exit cleanly. ! UIDESTROY is fired when a main or top-level user interface widget has ! been destroyed. It is used to shut down programs when their ! interfaces have been closed. =back *************** *** 4256,4279 **** POE::Kernel generates the same event when it receives either a SIGCHLD ! or SIGCLD signal from the operating system. This is done so sessions ! don't have to worry about which one they'll receive. ! Additionally, the Kernel's SIGCHLD/SIGCLD handler determines the ! exiting child's process ID and return value on behalf of sessions. ! This lets several sessions receive that information without deciding ! which will call waitpid(2). The SIGCHLD/SIGCHLD signal event comes with three custom parameters. ! C<ARG0> contains 'CHLD' even if SIGCLD was caught. C<ARG1> contains ! the child's process ID. C<ARG2> contains the child's return value ! from C<$?>. =item SIGPIPE Events Normally, system signals are posted to the Kernel so they can ! propagate to every session. SIGPIPE is an exception to this rule; ! it's posted to the session that's currently running. It still will ! propagate through that session's children, but it won't go beyond that ! parent/child tree. =item SIGWINCH Events --- 4324,4348 ---- POE::Kernel generates the same event when it receives either a SIGCHLD ! or SIGCLD signal from the operating system. This alleviates the need ! for sessions to check both signals. ! Additionally, the Kernel will determine the ID and return value of the ! exiting child process. The values are broadcast to every session, so ! several sessions can check whether a departing child process is ! theirs. The SIGCHLD/SIGCHLD signal event comes with three custom parameters. ! ! C<ARG0> contains 'CHLD', even if SIGCLD was caught. C<ARG1> contains ! the ID of the exiting child process. C<ARG2> contains the return ! value from C<$?>. =item SIGPIPE Events Normally, system signals are posted to the Kernel so they can ! propagate to every session. SIGPIPE is an exception to this rule. It ! is posted to the session that is currently running. It still will ! propagate through that session's children, but it will not go beyond ! that parent/child tree. =item SIGWINCH Events *************** *** 4281,4285 **** Window resizes can generate a large number of signals very quickly, and this can easily cause perl to dump core. Because of this, POE ! ignores SIGWINCH outright unless it's using Event's safe signals. =back --- 4350,4359 ---- Window resizes can generate a large number of signals very quickly, and this can easily cause perl to dump core. Because of this, POE ! usually ignores SIGWINCH outright. ! ! Signal handling in Perl 5.8.0 will be safer, and POE will take ! advantage of that to enable SIGWINCH again. ! ! POE will also handle SIGWINCH if the Event module is used. =back *************** *** 4312,4321 **** The sig() method does not return a meaningful value. =item signal SESSION, SIGNAL_NAME ! signal() posts a signal event to a session through POE::Kernel rather ! than actually signalling the process through the operating system. ! Because it injects signal events directly into POE's Kernel, its ! SIGNAL_NAME doesn't have to be one the operating system understands. For example, this posts a fictitious signal to some session: --- 4386,4401 ---- The sig() method does not return a meaningful value. + =item sig_handled + + sig_handled() informs POE that a signal was handled. It is only + meaningful within event handlers that are triggered by signals. + =item signal SESSION, SIGNAL_NAME ! signal() posts a signal event to a particular session (and its ! children) through POE::Kernel rather than actually signalling the ! process through the operating system. Because it injects signal ! events directly into POE's Kernel, its SIGNAL_NAME doesn't have to be ! one the operating system understands. For example, this posts a fictitious signal to some session: |
From: <rc...@us...> - 2002-05-10 01:45:24
|
Update of /cvsroot/poe/poe In directory usw-pr-cvs1:/tmp/cvs-serv24423 Modified Files: CHANGES Log Message: Document changes. :) Index: CHANGES =================================================================== RCS file: /cvsroot/poe/poe/CHANGES,v retrieving revision 1.91 retrieving revision 1.92 diff -C2 -d -r1.91 -r1.92 *** CHANGES 12 Apr 2002 21:08:56 -0000 1.91 --- CHANGES 10 May 2002 01:45:14 -0000 1.92 *************** *** 44,47 **** --- 44,69 ---- of signals, as expressed through various forms of feedback. + (!!!) Rocco implemented step 4 of the FooState deprecation in the + POE::Wheel modules. http://poe.perl.org/?POE_RFCs/XyzState_to_XyzEvent + has more details about this. This doesn't really change any + compatibility, but it makes a lot of noise. + + Rocco updated POE::Kernel so session IDs in TRACE_FOO and ASSERT_FOO + will show aliases when possible. + + Rocco added and documented sig_handled(). Rocco also cleaned up and + finished revising the signal dispatch docs and deprecations. There is + no deprecation warning at this time. + + Rocco updated many of the tests so they did not implicitly handle + signals. + + Rocco updated FooState to FooEvent in POE::Component::Server::TCP. + Client::TCP did not need the change. + + Rocco removed the forced tracing from lib/deptest.perl when run on + Solaris machines. Nobody seems to have encountered the problem that + required it lately. + --------------- 0.19 2002.03.25 |
From: <rc...@us...> - 2002-05-10 01:42:38
|
Update of /cvsroot/poe/poe/POE/Component/Server In directory usw-pr-cvs1:/tmp/cvs-serv23360/POE/Component/Server Modified Files: TCP.pm Log Message: Removed use of deprecated SuccessState and FailureState. Made them SuccessEvent and FailureEvent instead. Index: TCP.pm =================================================================== RCS file: /cvsroot/poe/poe/POE/Component/Server/TCP.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** TCP.pm 10 Jan 2002 20:16:34 -0000 1.19 --- TCP.pm 10 May 2002 01:42:35 -0000 1.20 *************** *** 206,211 **** BindAddress => $address, Reuse => 'yes', ! SuccessState => 'tcp_server_got_connection', ! FailureState => 'tcp_server_got_error', ); }, --- 206,211 ---- BindAddress => $address, Reuse => 'yes', ! SuccessEvent => 'tcp_server_got_connection', ! FailureEvent => 'tcp_server_got_error', ); }, |
From: <rc...@us...> - 2002-05-10 01:41:33
|
Update of /cvsroot/poe/poe/t In directory usw-pr-cvs1:/tmp/cvs-serv22884/t Modified Files: 01_sessions.t 02_alarms.t 03_aliases.t 07_event.t Log Message: Remove implicit signal handling from the tests. Index: 01_sessions.t =================================================================== RCS file: /cvsroot/poe/poe/t/01_sessions.t,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** 01_sessions.t 10 Sep 2001 16:38:29 -0000 1.16 --- 01_sessions.t 10 May 2002 01:41:29 -0000 1.17 *************** *** 126,133 **** --- 126,135 ---- sub { $sigalrm_caught++ if $_[ARG0] eq 'ALRM'; + $_[KERNEL]->sig_handled(); }, sigpipe_target => sub { $sigpipe_caught++ if $_[ARG0] eq 'PIPE'; + $_[KERNEL]->sig_handled(); }, } Index: 02_alarms.t =================================================================== RCS file: /cvsroot/poe/poe/t/02_alarms.t,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** 02_alarms.t 29 Jul 2001 18:37:02 -0000 1.9 --- 02_alarms.t 10 May 2002 01:41:29 -0000 1.10 *************** *** 425,434 **** # These should be dispatched in a certain order. _default => sub { # Save the test's argument on the heap. Check during _stop. ! push( @{$_[HEAP]->{tests}}, $_[ARG1]->[0] ) if $_[ARG0] =~ /test_\d+/; ! # Return 0 so we don't accidentally handle signals. ! return 0; }, --- 425,435 ---- # These should be dispatched in a certain order. _default => sub { + my ($kernel, $heap) = @_[KERNEL, HEAP]; # Save the test's argument on the heap. Check during _stop. ! push( @{$heap->{tests}}, $_[ARG1]->[0] ) if $_[ARG0] =~ /test_\d+/; ! # Handle the signal. ! $kernel->sig_handled(); }, Index: 03_aliases.t =================================================================== RCS file: /cvsroot/poe/poe/t/03_aliases.t,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** 03_aliases.t 18 Jul 2001 18:44:32 -0000 1.6 --- 03_aliases.t 10 May 2002 01:41:29 -0000 1.7 *************** *** 92,106 **** my ($kernel, $heap, $signal) = @_[KERNEL, HEAP, ARG0]; if ($signal eq 'IDLE') { $heap->{idle_count}++; ! return 1; } ! ! if ($signal eq 'ZOMBIE') { $heap->{zombie_count}++; ! return 1; } ! # Don't handle other signals. return 0; } --- 92,109 ---- my ($kernel, $heap, $signal) = @_[KERNEL, HEAP, ARG0]; + # Count and handle SIGIDLE and SIGZOMBIE. The latter is + # nonmaskable, however, so the program continues to run. + if ($signal eq 'IDLE') { $heap->{idle_count}++; ! return $kernel->sig_handled(); } ! elsif ($signal eq 'ZOMBIE') { $heap->{zombie_count}++; ! return $kernel->sig_handled(); } ! # We must still return 0 until significant return values are fully ! # removed. return 0; } Index: 07_event.t =================================================================== RCS file: /cvsroot/poe/poe/t/07_event.t,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** 07_event.t 9 Nov 2001 15:16:43 -0000 1.12 --- 07_event.t 10 May 2002 01:41:29 -0000 1.13 *************** *** 114,117 **** --- 114,118 ---- sub io_sig_usr1 { $_[HEAP]->{signal_count}++ if $_[ARG0] eq 'USR1'; + $_[KERNEL]->sig_handled(); } |