summaryrefslogtreecommitdiff
path: root/addressbook/libebook/e-book.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2007-10-11 14:40:13 +0000
committerMilan Crha <mcrha@src.gnome.org>2007-10-11 14:40:13 +0000
commitd403ddabf1f3dddb8c2383b8230d36df1ddabb2d (patch)
treea38099fa5b340e1b7a89842be576899611d5577a /addressbook/libebook/e-book.c
parentcaaf2b09fa417a720633a0e6975fe0bb80eaccef (diff)
downloadevolution-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.c27
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);