[PATCH] undead objects [was Re: Speedup insert into treestore]
- From: muppet <scott asofyet org>
- To: gtk-perl mailing list <gtk-perl-list gnome org>
- Subject: [PATCH] undead objects [was Re: Speedup insert into treestore]
- Date: Wed, 12 Oct 2005 08:06:08 -0400
On Oct 11, 2005, at 9:34 AM, muppet wrote:
Congratulations! You've found a reference-handling bug in
Glib::Object!
[...]
It's at this point that things blow up. The C object doesn't know
that there is a perl wrapper attached, so it happily dies, assuming
it has had a full-enough life. The perl wrapper object is left
pointing to freed memory, which is why you keep getting assertions
that your apple is not an apple -- it's actually a ghost apple.
The solution here will be some form of GObject trickery in the Glib
binding,
srwalter dropped this link in IRC last night:
http://oscillatingkinematics.org/gtk2-perl-locking.diff
The bug exists in situations where the "undead" perl wrapper must be
revived. The current code recognizes this situation as asking to own
an object with one reference; the C object gets a reference only if
the wrapper wants to own the object. This happens for all GtkObjects
(thanks to the sink semantics) but very rarely for things deriving
directly from GObject. Steven's patch adds an explicit "undead"
state for the wrapper, set in Glib::Object::DESTROY and cleared in
gperl_object_get().
Comments on the patch?
--
Package contains eight 13-inch aliens in assorted colors.
-- Catalog copy for space invaders wall decals.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]