Hi,
Whilst playing with libebook I noticed that the Bonobo POAs are being
newly created for every EBookListener and EBookViewListener created.
Originally I thought that Bonobo should be freeing these as they were
leaking, but it turns out that this is a libebook bug: POAs should be
long-lived.
This patch makes the POAs static in the _new methods, so they are only
created once. Michael Meeks says this will probably improve performance
too, as multiple POAs is a bad thing.
If this gets commit approval I'll be good and make a changelog entry
too, honest.
Ross
--
Ross Burton mail: ross burtonini com
jabber: ross burtonini com
www: http://www.burtonini.com./
PGP Fingerprint: 1A21 F5B0 D8D0 CFE3 81D4 E25A 2D09 E447 D0B4 33DF
Index: e-book-listener.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/libebook/e-book-listener.c,v
retrieving revision 1.14
diff -u -r1.14 e-book-listener.c
--- e-book-listener.c 4 Feb 2005 06:30:33 -0000 1.14
+++ e-book-listener.c 19 Apr 2005 14:40:31 -0000
@@ -403,9 +403,13 @@
e_book_listener_new ()
{
EBookListener *listener;
+ static PortableServer_POA poa = NULL;
+
+ if (poa == NULL)
+ poa = bonobo_poa_get_threaded (ORBIT_THREAD_HINT_ON_CONTEXT, _ebook_context, NULL);
listener = g_object_new (E_TYPE_BOOK_LISTENER,
- "poa", bonobo_poa_get_threaded (ORBIT_THREAD_HINT_ON_CONTEXT, _ebook_context, NULL),
+ "poa", poa,
NULL);
return listener;
Index: e-book-view-listener.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/libebook/e-book-view-listener.c,v
retrieving revision 1.8
diff -u -r1.8 e-book-view-listener.c
--- e-book-view-listener.c 22 Sep 2004 22:20:33 -0000 1.8
+++ e-book-view-listener.c 19 Apr 2005 14:40:31 -0000
@@ -285,9 +285,13 @@
e_book_view_listener_new ()
{
EBookViewListener *listener;
+ static PortableServer_POA poa = NULL;
+ if (poa == NULL)
+ poa = bonobo_poa_get_threaded (ORBIT_THREAD_HINT_PER_OBJECT, NULL);
+
listener = g_object_new (E_TYPE_BOOK_VIEW_LISTENER,
- "poa", bonobo_poa_get_threaded (ORBIT_THREAD_HINT_PER_OBJECT, NULL),
+ "poa", poa,
NULL);
listener->priv->queue = g_async_queue_new();
Attachment:
signature.asc
Description: This is a digitally signed message part