On Thu, Dec 15, 2005 at 10:44:42AM -0500, Sean Dague wrote: <snip>
This looks like you have a perl-derived CellRenderer in your code. In frame #5, gtk_tree_view_column_cell_set_cell_data() is calling g_object_set_property() on something, most likely using an attribute set up when the TreeViewColumn was created. The first red flag is the value of property_name in frame #4 -- is that a garbage string or a unicode string? I believe that most of the code assumes property names will be ASCII. This questionable value appears to have been mapped to a decent property id for the call to gperl_type_set_property(), which is in the vtable for perl- derived GObjects. When gperl_type_set_property() discovers there is no SET_PROPERTY() in the package and no sub registered as a set handler, it falls back to setting a key in the wrapper hash with the same name as the property. However, as you see in the trace, the name in frame #2 does not match the property_name in frame #4.
The following program was provided by one of our users that demonstrates the
glib crash we're seeing. Hopefully this will help figure out if there is a
bug in glib, or a bug in our brains, and we should be doing something
different.
#!/usr/bin/perl -w
# With Glib Perl v1.101 this script does not crash, but with v1.102
# it does. Removing the lines with BUG fixes the problem. Sadly
# fixing it tends to be more difficult in practice.
#
# On 1.102 I get:
#
# bash$ perl crash.pl
# INIT_INSTANCE
# Segmentation fault (core dumped)
# bash$ fgrep -v BUG crash.pl >work.pl
# bash$ perl work.pl
# INIT_INSTANCE
# Success made it to GET_SIZE
#
package CrashTest::CellRenderer;
use strict;
use Glib qw(G_PARAM_READWRITE);
use Gtk2;
use Glib::Object::Subclass "Gtk2::CellRenderer",
properties => [ Glib::ParamSpec->string('text', 'Text',
'The text string to display', '',
G_PARAM_READWRITE) ];
sub INIT_INSTANCE { warn "INIT_INSTANCE\n"; }
sub GET_SIZE { die "Made it to GET_SIZE\n"; }
sub RENDER { die "Made it to RENDER\n"; }
package main;
use strict;
use Glib;
use Gtk2 -init;
my $window = Gtk2::Window->new;
my $view;
{ # BUG: remove these brackets and it works!
my $treestore = Gtk2::TreeStore->new(qw/Glib::String/);
my $iter = $treestore->append(undef);
$treestore->set($iter, 0, "Row 1",);
$view = Gtk2::TreeView->new($treestore);
my $renderer = CrashTest::CellRenderer->new;
my $col =
Gtk2::TreeViewColumn->new_with_attributes("Simple text",
$renderer,
"text" => 0);
$view->append_column($col);
} # BUG: remove these brackets and it works!
$window->add ($view);
$window->show_all;
Gtk2->main;
--
__________________________________________________________________
Sean Dague Mid-Hudson Valley
sean at dague dot net Linux Users Group
http://dague.net http://mhvlug.org
There is no silver bullet. Plus, werewolves make better neighbors
than zombies, and they tend to keep the vampire population down.
__________________________________________________________________
Attachment:
pgpVIZ56HwIaN.pgp
Description: PGP signature