diff options
author | Milan Crha <mcrha@redhat.com> | 2007-10-11 14:40:13 +0000 |
---|---|---|
committer | Milan Crha <mcrha@src.gnome.org> | 2007-10-11 14:40:13 +0000 |
commit | d403ddabf1f3dddb8c2383b8230d36df1ddabb2d (patch) | |
tree | a38099fa5b340e1b7a89842be576899611d5577a /addressbook/libebook/e-book.c | |
parent | caaf2b09fa417a720633a0e6975fe0bb80eaccef (diff) | |
download | evolution-data-server-d403ddabf1f3dddb8c2383b8230d36df1ddabb2d.tar.gz |
** Fix for bug #420167
2007-10-11 Milan Crha <mcrha@redhat.com>
** Fix for bug #420167
* addressbook/libebook/e-book.c: (e_book_unload_uri), (e_book_dispose):
Be sure we released corba_book and stopped listener.
* calendar/backends/contacts/e-cal-backend-contacts.c: (contact_record_new),
(contact_record_free), (contact_record_cb_new):
Ref and Unref backend used in ContactRecord to be sure it isn't
freed before we endup with it.
svn path=/trunk/; revision=8110
Diffstat (limited to 'addressbook/libebook/e-book.c')
-rw-r--r-- | addressbook/libebook/e-book.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/addressbook/libebook/e-book.c b/addressbook/libebook/e-book.c index fd8f2f921..7239a611b 100644 --- a/addressbook/libebook/e-book.c +++ b/addressbook/libebook/e-book.c @@ -119,9 +119,6 @@ typedef enum { } EBookLoadState; struct _EBookPrivate { - GList *book_factories; - GList *iter; - /* cached capabilites */ char *cap; gboolean cap_queried; @@ -3188,6 +3185,7 @@ e_book_unload_uri (EBook *book, CORBA_exception_free (&ev); + book->priv->corba_book = CORBA_OBJECT_NIL; e_book_listener_stop (book->priv->listener); bonobo_object_unref (BONOBO_OBJECT (book->priv->listener)); @@ -4001,9 +3999,6 @@ e_book_dispose (GObject *object) EBook *book = E_BOOK (object); if (book->priv) { - CORBA_Environment ev; - GList *l; - if (book->priv->comp_listener) { g_signal_handler_disconnect (book->priv->comp_listener, book->priv->died_signal); g_object_unref (book->priv->comp_listener); @@ -4013,21 +4008,19 @@ e_book_dispose (GObject *object) if (book->priv->load_state == E_BOOK_SOURCE_LOADED) e_book_unload_uri (book, NULL); - CORBA_exception_init (&ev); - - for (l = book->priv->book_factories; l; l = l->next) { - CORBA_Object_release ((CORBA_Object)l->data, &ev); - if (ev._major != CORBA_NO_EXCEPTION) { - g_warning ("EBook: Exception while releasing BookFactory\n"); + if (book->priv->corba_book) { + CORBA_Environment ev; - CORBA_exception_free (&ev); - CORBA_exception_init (&ev); - } + CORBA_exception_init (&ev); + bonobo_object_release_unref (book->priv->corba_book, &ev); + if (ev._major != CORBA_NO_EXCEPTION) + g_warning ("%s: Exception releasing remote book interface!\n", __FUNCTION__); + CORBA_exception_free (&ev); } - - CORBA_exception_free (&ev); if (book->priv->listener) { + e_book_listener_stop (book->priv->listener); + /* GLib bug compatibility */ if (g_signal_handler_is_connected (book->priv->listener, book->priv->listener_signal)) g_signal_handler_disconnect (book->priv->listener, book->priv->listener_signal); |