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 { ... }

Reply via email to