Re: GVolumeMonitor, signals and scoping
- From: John Ralls <jralls ceridwen us>
- To: Daniel Drake <dsd laptop org>
- Cc: python-hackers-list gnome org
- Subject: Re: GVolumeMonitor, signals and scoping
- Date: Tue, 25 Sep 2012 09:11:37 -0700
On Sep 25, 2012, at 8:54 AM, Daniel Drake <dsd laptop org> wrote:
> Hi,
>
> Take this test program:
>
> ============
> from gi.repository import Gio, Gtk
> mon = None
>
> def volume_added(mon, volume):
> print "VOLUME ADDED", volume.get_name()
>
> def start():
> #global mon
> mon = Gio.VolumeMonitor.get()
> mon.connect("volume-added", volume_added)
>
> start()
> Gtk.main()
> ============
>
> It doesn't work - volume_added is never called.
>
> Uncomment the line that says "global mon". Now it works.
>
> I presume the first version doesn't work since the mon object falls
> out of scope and the object gets destroyed. But the equivalent code
> did work for some reason in pygtk 2.x.
>
> I guess the above behaviour makes sense, but it touches upon something
> I've never been quite certain about: if a gobject (or some kind of Gtk
> object) has all its references dropped but there are still signal
> handlers connected, does gobject/gtk go ahead and destroy the object
> anyway?
Yes. A zero reference count is the sole criterion for destruction. You can force an object to run its first-stage destructor with run_dispose(), but that won't free the memory. It's provided to break reference loops. Signals are just a way of registering callbacks, and have nothing to do with this process.
Regards,
John Ralls
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]