diff --git a/ORBit2-2.14.3-ref-leaks.patch b/ORBit2-2.14.3-ref-leaks.patch new file mode 100644 index 0000000..fc4a1e8 --- /dev/null +++ b/ORBit2-2.14.3-ref-leaks.patch @@ -0,0 +1,51 @@ +--- ORBit2-2.14.3/src/orb/orb-core/orbit-object.c.ref-leaks 2003-10-29 07:22:12.000000000 -0500 ++++ ORBit2-2.14.3/src/orb/orb-core/orbit-object.c 2006-12-08 12:03:55.000000000 -0500 +@@ -115,16 +115,22 @@ + obj->refs = 0; + } + ++#define ORBIT_REFCOUNT_IMMORTAL (ORBIT_REFCOUNT_MAX / 2) ++ + gpointer + ORBit_RootObject_duplicate (gpointer obj) + { + ORBit_RootObject robj = obj; + +- if (robj && robj->refs != ORBIT_REFCOUNT_STATIC) { ++ if (robj && robj->refs != ORBIT_REFCOUNT_STATIC && ++ robj->refs != ORBIT_REFCOUNT_IMMORTAL) { + LINK_MUTEX_LOCK (ORBit_RootObject_lifecycle_lock); + robj->refs++; + total_refs++; + LINK_MUTEX_UNLOCK (ORBit_RootObject_lifecycle_lock); ++ if (robj->refs == ORBIT_REFCOUNT_IMMORTAL) ++ g_warning ("ORB: ORBit_RootObject %p became immortal" ++ " - reference leaks present", robj); + } + + return obj; +@@ -135,9 +141,13 @@ + { + ORBit_RootObject robj = obj; + +- if (robj && robj->refs != ORBIT_REFCOUNT_STATIC) { ++ if (robj && robj->refs != ORBIT_REFCOUNT_STATIC && ++ robj->refs != ORBIT_REFCOUNT_IMMORTAL) { + robj->refs++; + total_refs++; ++ if (robj->refs == ORBIT_REFCOUNT_IMMORTAL) ++ g_warning ("ORB: ORBit_RootObject %p became immortal" ++ " - reference leaks present", robj); + } + + return obj; +@@ -148,6 +158,9 @@ + { + g_assert (robj->refs < ORBIT_REFCOUNT_MAX && robj->refs > 0); + ++ if (robj->refs == ORBIT_REFCOUNT_IMMORTAL) ++ return; ++ + robj->refs--; + total_refs--; + diff --git a/ORBit2.spec b/ORBit2.spec index b88ef7f..c7f9a7a 100644 --- a/ORBit2.spec +++ b/ORBit2.spec @@ -4,7 +4,7 @@ Summary: A high-performance CORBA Object Request Broker Name: ORBit2 Version: 2.14.3 -Release: 3%{?dist} +Release: 4%{?dist} Source: %{name}-%{version}.tar.bz2 Group: System Environment/Daemons License: LGPL/GPL @@ -21,6 +21,8 @@ BuildRequires: gtk-doc Patch0: ORBit2-2.14.3-multilib.patch # fixed in upstream cvs Patch1: ORBit2-2.14.3-non-local-ipv4.patch +# handle ref leaks in the a11y stack more gracefully +Patch2: ORBit2-2.14.3-ref-leaks.patch %description ORBit is a high-performance CORBA (Common Object Request Broker @@ -58,6 +60,7 @@ write such programs, you'll also need to install the ORBIT package. %setup -q %patch0 -p1 -b .multilib %patch1 -p1 -b .non-local-ipv4 +%patch2 -p1 -b .ref-leaks %build ## the shipped libtool is broken wrt. multilib @@ -130,6 +133,9 @@ rm -rf %{buildroot} %{_datadir}/gtk-doc %changelog +* Fri Dec 8 2006 Matthias Clasen - 2.14.3-4 +- Handle ref leaks in the a11y stack more gracefully (#214795) + * Sun Sep 10 2006 Matthias Clasen - 2.14.3-3 - Make non-local IPv4 work again (#205950)