After some more digging, I've pretty much come to the conclusion that what I'm trying to do can't be done without mucking around with POE internals....
Here is the code I finally came up with, though I would prefer there were a way to do it without the monkey-patch. On the other hand though, monkey-patching seems to be part of the core for POE. :)
# NOTE: This hasn't really had any testing yet...
package POE::Resource::Sessions::GCIgnore;
use strict; use warnings;
our $VERSION = '0.01';
# monkey-patch into POE::Kernel
package POE::Kernel;
sub _data_ses_collect_garbage {
my ( $self, $session ) = @_;
# snipping out the ASSERT_DATA/TRACE_REFCOUNT stuff
# that was just copied from POE::Resource::Sessions...
my $count = $kr_sessions{ $session }->[ SS_REFCOUNT ];
if ( $session->can( 'gc_ignore' ) ) {
$count -= $session->gc_ignore;
}
return if $count > 0;
$self->_data_ses_stop( $session );
}
We're not surrounded, we're in a target-rich environment! |
---|