[poe-commits] poe/lib/POE/Resource Sessions.pm,1.20,1.21 Signals.pm,1.14,1.15
Brought to you by:
rcaputo
From: <ha...@us...> - 2005-11-07 06:59:16
|
Update of /cvsroot/poe/poe/lib/POE/Resource In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8605/lib/POE/Resource Modified Files: Sessions.pm Signals.pm Log Message: Change signal watchers so they keep sessions alive. WARNING: This is a major semantics change in POE. It has the potential to make code 'hang' in places where it formerly did not. This change is necessary so sessions expressing an interest in SIG CH?LD do not die prematurely. (There is a planned mandatory warning for reaped children that were not being watched.) This change fixes RT 15215. Index: Sessions.pm =================================================================== RCS file: /cvsroot/poe/poe/lib/POE/Resource/Sessions.pm,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** Sessions.pm 22 Apr 2005 20:36:31 -0000 1.20 --- Sessions.pm 7 Nov 2005 06:59:07 -0000 1.21 *************** *** 415,419 **** $self->_data_handle_count_ses($session) + $self->_data_extref_count_ses($session) + ! $self->_data_alias_count_ses($session) ); --- 415,420 ---- $self->_data_handle_count_ses($session) + $self->_data_extref_count_ses($session) + ! $self->_data_alias_count_ses($session) + ! $self->_data_sig_count_ses($session) ); Index: Signals.pm =================================================================== RCS file: /cvsroot/poe/poe/lib/POE/Resource/Signals.pm,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** Signals.pm 15 May 2005 07:09:44 -0000 1.14 --- Signals.pm 7 Nov 2005 06:59:07 -0000 1.15 *************** *** 147,154 **** --- 147,176 ---- } + ### Count the number of refcount slots used for a particular + ### session in signal watchers. + + sub _data_sig_count_ses { + my ($self, $session) = @_; + + if (exists( $kr_sessions_to_signals{$session} )) { + return scalar keys %{$kr_sessions_to_signals{$session}}; + } + else { + return 0; + } + } + ### Add a signal to a session. sub _data_sig_add { my ($self, $session, $signal, $event) = @_; + + unless ( + exists($kr_sessions_to_signals{$session}) and + exists($kr_sessions_to_signals{$session}->{$signal}) + ) { + $self->_data_ses_refcount_inc( $session ); + } + $kr_sessions_to_signals{$session}->{$signal} = $event; $kr_signals{$signal}->{$session} = $event; *************** *** 169,172 **** --- 191,201 ---- my ($self, $session, $signal) = @_; + if ( + exists($kr_sessions_to_signals{$session}) and + exists($kr_sessions_to_signals{$session}->{$signal}) + ) { + $self->_data_ses_refcount_dec( $session ); + } + delete $kr_sessions_to_signals{$session}->{$signal}; delete $kr_sessions_to_signals{$session} |