Re: Problem with global destruction
- From: "muppet" <scott asofyet org>
- To: gtk-perl-list gnome org
- Subject: Re: Problem with global destruction
- Date: Mon, 19 Mar 2007 12:40:57 -0400 (EDT)
Ari Jolma wrote:
I wrote:
class is created and used. I've defined two new signal types for the object.
I tried commenting out every line of code which has something to do with
signals and it turns out that if I connect the size_allocate signal to a
function (this is in sub INIT_INSTANCE of the subclass of
Gtk2::ScrolledWindow):
$self->{image}->signal_connect(size_allocate => \&size_allocate, $self);
the problem appears.
At first blush, it sounds like you have created a reference leak. (This is
far from definitive, but that's what it sounds like.)
Try overriding the destroy signal (NOT the DESTROY method, but the "destroy"
signal!!) on your ScrolledWindow subclass, and in there, disconnect the signal
and destroy the child.
# INIT_INSTANCE
# keep the handler id so we can disconnect it later
$self->{image_allocate_signal} =
$self->{image}->signal_connect(size_allocate => \&size_allocate, $self);
# do_destroy
# disconnect the handler added in INIT_INSTANCE to break the ref cycle
$self->{image}->signal_handler_disconnect ($self->{image_allocate_signal});
# chain up, so that the rest of the destruction happens properly
$self->signal_chain_from_overridden (@_);
# release our own reference (may not be strictly necessary)
delete $self->{image};
--
muppet <scott at asofyet dot org>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]