Package: libgnetwork1.0-0 Version: 0.0.7-1 Severity: important Tags: patch
When a GNetworkUdpDatagram is explicitly closed, its GLib IO source is left active with a callback whose user data is the datagram object, yet the callback does not hold a reference to the object. This becomes a serious problem when the IO source for a datagram invokes its callback after the datagram object has been finalized. I believe the solution is to simply remove the IO source when a UDP datagram is explicitly closed. This already happens when a UDP datagram is closed as the result of an error. -- System Information: Debian Release: 3.1 APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.7-drlion-8 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Versions of packages libgnetwork1.0-0 depends on: ii gconf2 2.8.1-4 GNOME configuration database syste ii libc6 2.3.2.ds1-18 GNU C Library: Shared libraries an ii libgconf2-4 2.8.1-4 GNOME configuration database syste ii libglib2.0-0 2.6.1-2 The GLib library of C routines ii libgnutls11 1.0.16-9 GNU TLS library - runtime library ii liborbit2 1:2.10.2-1.1 libraries for ORBit2 - a CORBA ORB -- no debconf information
--- libgnetwork-0.0.7.orig/libgnetwork/gnetwork-udp-datagram.c +++ libgnetwork-0.0.7/libgnetwork/gnetwork-udp-datagram.c @@ -708,9 +708,16 @@ static void gnetwork_udp_datagram_close (GNetworkUdpDatagram * udp) { if (udp->_priv->dgram_status <= GNETWORK_DATAGRAM_CLOSED) return; + if (udp->_priv->source_id != 0) + { + gnetwork_thread_source_remove (udp->_priv->source_id); + udp->_priv->source_cond = 0; + udp->_priv->source_id = 0; + } + if (udp->_priv->channel != NULL) { g_io_channel_unref (udp->_priv->channel); --- libgnetwork-0.0.7.orig/ChangeLog +++ libgnetwork-0.0.7/ChangeLog @@ -1,3 +1,8 @@ +2005-01-31 Daniel Brockman <[EMAIL PROTECTED]> + + * libgnetwork/gnetwork-udp-datagram.c + (gnetwork_udp_datagram_close): Remove the IO source. + 2004-12-24 James M. Cape <[EMAIL PROTECTED]> * .cvsignore: Alphabetized, added a bunch more autotools stuff.