Subject: | user-defined signals can dispatch to non-existent session |
When using the kernel's signal() method to send a user-defined signal, it's possible to get a signal dispatched to a session which is in the process of shutting down (i.e. about to call the _stop event). However, the garbage collection in _data_sig_free_terminated_sessions doesn't take this into account and can cause POE to die screaming with an internal inconsistency error in _data_ses_collect_garbage.
--- lib/perl5/POE/Kernel.pm Tue Apr 29 18:04:57 2003
+++ lib/perl5/POE/Kernel.pm.orig Wed Feb 5 16:22:11 2003
@@ -699,7 +699,6 @@
}
else {
foreach my $touched_session (@kr_signaled_sessions) {
- next unless $self->_data_ses_exists($touched_session);
$self->_data_ses_collect_garbage($touched_session);
}
}