Hi,
I'm going to use POE::Whel::Run in a system monitoring tool.
I implemented a cron-like functionality to start up periodic measurements,
but I've encountered a serious resource leak: Along with every
creation/destruction of POE::Wheel::Run the RSS of the monitoring process
increased. This was the knock out for my monitoring daemon. :-(
I'm using POE 0.25 and Perl 5.8.0 on Linux.
What I'm doing wrong?
Thanks in advance,
Sebastian
---snip---example-code---snip---
sub create()
{
my( $class, $this, $monitor, $params ) = @_;
[... stuff wrapped ...]
POE::Session->create(
args => [ $params, $this ],
inline_states => {
_start => \&start,
run => \&run,
run_error => \&run_error,
run_close => \&run_close,
run_stdout => \&run_stdout,
run_stderr => \&run_stderr ,
}
);
}
sub start
{
my ($kernel, $heap, $params, $this) = @_[KERNEL, HEAP, ARG0, ARG1];
[... stuff wrapped ...]
$kernel->yield( 'run' );
}
sub run
{
my ($kernel, $heap) = @_[KERNEL, HEAP];
[... some stuff wrapped ...]
my $job = POE::Wheel::Run->new(
Program => $prog,
ErrorEvent => 'run_error',
CloseEvent => 'run_close',
StdoutEvent => 'run_stdout',
StderrEvent => 'run_stderr',
);
$heap->{'job'} = {
'hanlde' => $job,
'ID' => $job->ID,
'PID' => $job->PID,
};
if( $params->{'recurrence'} > 0 )
{
$kernel->delay( 'run', $params->{'recurrence'});
}
}
sub run_error { ... }
sub run_close
{
my ($kernel, $heap) = @_[KERNEL, HEAP];
delete $heap->{'job'};
}
sub run_stdout { ... }
sub run_stderr { ... }