Re: Segmentation fault in gtk2-perl-application




On Mar 31, 2005, at 4:20 PM, Stephan Brunner wrote:

Am Donnerstag 31 März 2005 04:33 schrieb muppet:
What versions of gtk+, glib, Gtk2, and Glib are you using?  what
OS/dist?

I run Debian Sarge on x86; that came with gtk+ 2.6.2, glib 2.6.3, Gtk2 and
Glib 1.062. My personal debug-build of Gtk2 and Glib is 1.080.

on Fedora 2 with glib-2.4.0, gtk+ 2.4.7, Glib/Gtk2 1.080, i can't seem to reproduce the failure with your script.

same results in my cvs sandbox, which has glib-2.6.5 and gtk+ 2.6.4.


Beyond that, seeing the code is really going to be necessary.

Here it is -- to my own surprise, I was able to delete pretty much everything of my script and still get the segfault. What's left is not more than a very basic gtk2-app that does nothing else than prompt for a directory if you
select File->open directory or hit Ctrl-O:

what about this even shorter version? does it still exhibit the same behavior? (i merely replaced the UIManager gui with a simple window containing a button. if this one still crashes, we can rule out UIManager interactions...)

-=-=-=-=-
#!/usr/bin/perl
use warnings;
use strict;
use Gtk2 '-init';

my $window = Gtk2::Window->new;
$window->signal_connect (destroy => sub { Gtk2->main_quit; });

my $button = Gtk2::Button->new ('click me');
$button->signal_connect (clicked => \&loadDir);
$window->add ($button);

$window->show_all;
Gtk2->main;

###
sub loadDir {
    print "Entering sub loadDir...\n";
    my $dlg = Gtk2::FileChooserDialog->new('Select directory', undef,
         'select-folder',
         'gtk-cancel' => 'cancel',
         'gtk-open' => 'ok');
    my $response = $dlg->run();
    if ($response ne 'ok') {
        print "You aborted.\n";
    }
    else {
        print 'You selected: >' . $dlg->get_filename . "<\n";
    }

    $dlg->destroy();
    print "Leaving sub loadDir...\n";
}
-=-=-=-=-


The probability of getting the segfault depends on the directory selected -- there is a folder in my $HOME that almost always results in the segfault.

what is the name of that folder? does its name (or the names of its children) contain any non-ascii characters? how many files are in that folder?



For the above sample-script, I created a new backtrace which is much shorter
than the one I sent yesterday:

(gdb) bt
#0 0x40769d9c in gtk_path_bar_get_type () from /usr/lib/libgtk-x11-2.0.so.0

the valgrind output confirms that there's memory corruption, specifically, using freed memory on the heap. the fun part will be tracking down where and why that actually occurs...


The above script is so short and simple that I am stunned it can segfault.

heh. try a script that merely creates a common dialog (one-liner) but doesn't first call Gtk2->init. it blows up almost immediately because pango isn't initialized. ;-)


--
I think it worked on the Wiley Coyote model of project management - if
at any point you looked down and realised what you were doing was
impossible then you'd instantly fail.
  -- Simon Wistow




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]