• Matthias Clasen's avatar
    [gsignal] disconnect invalidated closures · d03d26fe
    Matthias Clasen authored
    Modify gsignal to automatically disconnect a GClosure that becomes
    invalid (in the g_closure_invalidate() sense).
    
    Previously, when g_signal_connect_object() was used with a GObject as
    the user_data and that object was destroyed, the handler would no longer
    be called but the signal handler was itself was not disconnected (ie:
    the bookkeeping data was kept around).
    
    The main effect of this patch is that these signal handlers will now
    be automatically disconnected (and fully freed).
    
    The documentation for g_signal_connect_object() has anticipated this
    change for over 10 years and has advised the following workaround when
    disconnecting signal handlers connected with g_signal_connect_object():
    
     if (g_signal_handler_is_connected (instance, id))
       g_signal_handler_disconnect (instance, id);
    
    If your code follows this practice then it will continue to work.
    
    If your code never disconnects the signal handler then it was wasting
    memory before (and this commit fixes that).
    
    If your code unconditionally disconnects the signal handler then you
    will start to see (harmless) g_critical() warnings about this and you
    should fix them.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=118536
    d03d26fe
Name
Last commit
Last update
build Loading commit data...
docs Loading commit data...
gio Loading commit data...
glib Loading commit data...
gmodule Loading commit data...
gobject Loading commit data...
gthread Loading commit data...
m4macros Loading commit data...
po Loading commit data...
tests Loading commit data...
.dir-locals.el Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
COPYING Loading commit data...
ChangeLog.pre-1-2 Loading commit data...
ChangeLog.pre-2-0 Loading commit data...
ChangeLog.pre-2-10 Loading commit data...
ChangeLog.pre-2-12 Loading commit data...
ChangeLog.pre-2-14 Loading commit data...
ChangeLog.pre-2-16 Loading commit data...
ChangeLog.pre-2-18 Loading commit data...
ChangeLog.pre-2-2 Loading commit data...
ChangeLog.pre-2-20 Loading commit data...
ChangeLog.pre-2-4 Loading commit data...
ChangeLog.pre-2-6 Loading commit data...
ChangeLog.pre-2-8 Loading commit data...
HACKING Loading commit data...
INSTALL.in Loading commit data...
Makefile.am Loading commit data...
Makefile.decl Loading commit data...
NEWS Loading commit data...
NEWS.pre-1-3 Loading commit data...
README.commits Loading commit data...
README.in Loading commit data...
README.win32 Loading commit data...
acglib.m4 Loading commit data...
acinclude.m4 Loading commit data...
autogen.sh Loading commit data...
config.h.win32.in Loading commit data...
configure.ac Loading commit data...
gio-2.0.pc.in Loading commit data...
gio-unix-2.0.pc.in Loading commit data...
gio-windows-2.0.pc.in Loading commit data...
glib-2.0.pc.in Loading commit data...
glib-gettextize.in Loading commit data...
glib-zip.in Loading commit data...
glib.doap Loading commit data...
gmodule-2.0.pc.in Loading commit data...
gmodule-export-2.0.pc.in Loading commit data...
gmodule-no-export-2.0.pc.in Loading commit data...
gobject-2.0.pc.in Loading commit data...
gthread-2.0.pc.in Loading commit data...
makefile.msc Loading commit data...
mkinstalldirs Loading commit data...
msvc_recommended_pragmas.h Loading commit data...
sanity_check Loading commit data...
win32-fixup.pl Loading commit data...