? at-spi-1.7.5.tar.gz
? at-spi-1.7.6.tar.gz
? at-spi-server-fix.diff
? depcomp
? eog-trace.txt
? gtk-doc.make
? leak-fix-diffs.diff
? leak-fix-final.diff
? leak-fix-next.diff
? leak-fix.diff
? leakfix.diff
? this-patch-breaks-stuff.diff
? docs/reference/cspi/at-spi-cspi.interfaces
? docs/reference/cspi/at-spi-cspi.prerequisites
? docs/reference/cspi/tmpl/at-spi-cspi-unused.sgml
? docs/reference/cspi/tmpl/spi_streamable_content.sgml
? login-helper/Accessibility_LoginHelper-common.c
? login-helper/Accessibility_LoginHelper-imodule.c
? login-helper/Accessibility_LoginHelper-skels.c
? login-helper/Accessibility_LoginHelper-stubs.c
? login-helper/Accessibility_LoginHelper.h
? po/stamp-it
? test/event-listener-test
? test/keypad-test
? test/keysynth-test
? test/login-helper-client-test
? test/login-helper-server-test
? test/screen-review-test
? test/stress-test
? test/window-listener-test
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/at-spi/ChangeLog,v
retrieving revision 1.496
diff -u -r1.496 ChangeLog
--- ChangeLog	20 Feb 2006 15:04:21 -0000	1.496
+++ ChangeLog	27 Feb 2006 22:17:52 -0000
@@ -1,5 +1,29 @@
 2006-02-20  Bill Haneman <billh@gnome.org>
 
+	* configure.in: Rev to 1.7.6.
+
+	Leak fixes for bug #331924.
+	
+	* atk-bridge/bridge.c:
+	(spi_atk_bridge_init_base): Don't dup the string, it's already
+	been dup-ed.  Fixes a leak.
+	(spi_atk_emit_eventv): Move the CORBA_free call here, 
+	instead of spi_atk_state_event_listener; fixes another leak.
+	(spi_atk_bridge_key_listener):Free the dup'ed key strings after
+	notifying the registry; fixes another leak.
+
+	* registryd/registry.c:
+	(registry_flush_event_queue): Free the CORBA_any when 
+	flushing the event, not just the string.  Fixes another leak.
+	(registry_queue_event): Free the CORBA_any when dropping
+	events on the floor; fixes another leak.
+
+	* libspi/util.c:
+	(spi_init_any_object, spi_init_any_nil): 
+	Always set _release to TRUE.  Fixes another leak.
+
+2006-02-20  Bill Haneman <billh@gnome.org>
+
 	* configure.in: Rev to 1.7.5.
 	Reinstate localization of this module.  Thanks for Rodney
 	Dawes for fixing my patch.
Index: configure.in
===================================================================
RCS file: /cvs/gnome/at-spi/configure.in,v
retrieving revision 1.176
diff -u -r1.176 configure.in
--- configure.in	20 Feb 2006 15:04:21 -0000	1.176
+++ configure.in	27 Feb 2006 22:17:52 -0000
@@ -2,7 +2,7 @@
 
 AT_SPI_MAJOR_VERSION=1
 AT_SPI_MINOR_VERSION=7
-AT_SPI_MICRO_VERSION=5
+AT_SPI_MICRO_VERSION=6
 AT_SPI_INTERFACE_AGE=0
 AT_SPI_BINARY_AGE=0
 AT_SPI_VERSION="$AT_SPI_MAJOR_VERSION.$AT_SPI_MINOR_VERSION.$AT_SPI_MICRO_VERSION"
Index: atk-bridge/bridge.c
===================================================================
RCS file: /cvs/gnome/at-spi/atk-bridge/bridge.c,v
retrieving revision 1.89
diff -u -r1.89 bridge.c
--- atk-bridge/bridge.c	30 Jan 2006 19:57:37 -0000	1.89
+++ atk-bridge/bridge.c	27 Feb 2006 22:17:53 -0000
@@ -693,6 +693,8 @@
   CORBA_exception_free (&ev);
   
   g_free (e.type);
+
+  if (e.any_data._release) CORBA_free (&e.any_data._value);
   
   va_end (args);
 
@@ -952,6 +954,8 @@
   result = Accessibility_DeviceEventController_notifyListenersSync (
 	  spi_atk_bridget_get_dec (), &key_event, &ev);
 
+  if (key_event.event_string) CORBA_free (key_event.event_string);
+
   if (BONOBO_EX(&ev)) {
       result = FALSE;
       CORBA_exception_free (&ev);
@@ -1080,10 +1084,8 @@
     spi_atk_emit_eventv (gobject, detail1, detail2, &any,
 			 "object:%s", name);
 
-  if (sp)
+  if (sp) 
     g_free (sp);
-  if (any._release)
-    CORBA_free (any._value);
 
   return TRUE;
 }
@@ -1173,7 +1175,7 @@
     const gchar *s = atk_object_get_name (obj);
     *app = spi_accessible_new_return (atk_get_root (), FALSE, NULL);
     *role = spi_role_from_atk_role (atk_object_get_role (obj));
-    *name = CORBA_string_dup (s ? s : "");
+    *name = s ? s : ""; /* string gets dup-ed in util.c spi_init_any_* */
 }
 
 static void     
Index: libspi/util.c
===================================================================
RCS file: /cvs/gnome/at-spi/libspi/util.c,v
retrieving revision 1.8
diff -u -r1.8 util.c
--- libspi/util.c	16 Jan 2006 14:16:45 -0000	1.8
+++ libspi/util.c	27 Feb 2006 22:17:54 -0000
@@ -130,7 +130,7 @@
 
   details->any_data._type = TC_null;
   details->any_data._value = NULL;
-  details->any_data._release = FALSE;
+  details->any_data._release = TRUE;
 }
 
 void 
@@ -151,7 +151,7 @@
   
   details->any_data._type = TC_CORBA_Object;
   details->any_data._value = o;
-  details->any_data._release = FALSE;
+  details->any_data._release = TRUE;
 }
 
 void
Index: registryd/registry.c
===================================================================
RCS file: /cvs/gnome/at-spi/registryd/registry.c,v
retrieving revision 1.70
diff -u -r1.70 registry.c
--- registryd/registry.c	16 Jan 2006 14:16:45 -0000	1.70
+++ registryd/registry.c	27 Feb 2006 22:17:55 -0000
@@ -718,6 +718,8 @@
     }
     CORBA_free ((void *)q_ctx->etype.event_name);
     CORBA_free ((void *)q_ctx->e_out.type);
+    if (q_ctx->e_out.any_data._type != TC_null) 
+	CORBA_free ((void *)q_ctx->e_out.any_data._value);
     g_free (q_ctx);
   }
   registry->is_queueing = FALSE;
@@ -848,6 +850,8 @@
       bonobo_object_release_unref (q_ctx->source, NULL);
       CORBA_free ((void *)q_ctx->etype.event_name);
       CORBA_free ((void *)q_ctx->e_out.type);
+      if (q_ctx->e_out.any_data._type != TC_null) 
+	  CORBA_free ((void *)q_ctx->e_out.any_data._value);
       g_free (q_ctx);
       return TRUE; 
     }
