On 14/05/15 15:24, Steve Cookson wrote:
That has been a very painful lesson. We've now run over 60 video tests with no crashes, so I hope it is resolved.

I spoke too soon: the crashes have just moved to a different part of the system.

I've cut down a piece of code to try to isolate the problem and it follows this email.

If I create a few controls in a dialog, delete the dialog, use $app->Yield for the background processing to take place, I still end up with more Perl objects after the deletion than before.

Any ideas welcome.

Regards

Steve

#! /usr/bin/perl

package main;
use strict;
use warnings;

$main::app = App->new();
$main::app->MainLoop;

package App;
use strict;
use warnings;
use base 'Wx::App';


sub OnInit {

    Wx::InitAllImageHandlers();
    my $frame = Launch->new();
    $frame->Show(1);

}

package Launch;
use strict;
use warnings;
use Wx qw(:everything);
use base qw(Wx::Frame);
use Devel::Leak;
sub new {
    my ($class, $parent) = @_;


my $i_frame = $class->SUPER::new($parent, -1, "Test", wxDefaultPosition, wxDefaultSize); $i_frame->{panel} = Wx::Panel->new($i_frame, -1, wxDefaultPosition, wxDefaultSize);
    $i_frame->{sizer} = Wx::BoxSizer->new(wxVERTICAL);
$i_frame->{button} = Wx::Button->new($i_frame->{panel}, -1, "Launch", wxDefaultPosition, wxDefaultSize);
    $i_frame->{sizer}->Add($i_frame->{button});
    $i_frame->{panel}->SetSizer($i_frame->{sizer});
    $i_frame->{panel}->Layout();
    Wx::Event::EVT_BUTTON( $i_frame, $i_frame->{button}, sub {
    my ($self1, $event1) = @_;
    my $count1 =  Devel::Leak::NoteSV(my $handle);
    my $frame = Dialog->new();
    $frame->ShowModal();
    $frame->Destroy();
    $main::app->Yield();
    my $count2 =  Devel::Leak::CheckSV($handle );
    print $count1, "\n";
    print $count2, "\n";
    print $count2-$count1, "\n";
    });
    return $i_frame;

}
package Dialog;
use strict;
use warnings;
use Wx qw(:everything);
use base qw(Wx::Dialog);

sub new {
    my ($class, $parent) = @_;

my $frame2 = $class->SUPER::new($parent, -1, "Test i_Layout" , wxDefaultPosition, wxDefaultSize); $frame2->{panel2} = Wx::Panel->new($frame2, -1 , wxDefaultPosition, wxDefaultSize, );
    $frame2->{sizer2} = Wx::BoxSizer->new(wxHORIZONTAL);
    $frame2->{panel2}->SetSizer($frame2->{sizer2});
    $frame2->{panel2}->Layout();

    return $frame2;

}
1;



Reply via email to