From 9aa24e5bd2d516b9722db784a16fd3ef838037a1 Mon Sep 17 00:00:00 2001 From: Chris Toshok Date: Sun, 10 Nov 2002 09:49:37 +0000 Subject: guard against multiple invocations. 2002-11-10 Chris Toshok * backend/pas/pas-backend-card-sexp.c (pas_backend_card_sexp_dispose): guard against multiple invocations. * backend/pas/pas-card-cursor.c (pas_card_cursor_dispose): same. * backend/pas/pas-book.c (pas_book_dispose): same. * backend/pas/pas-book-view.c (pas_book_view_dispose): same. * backend/pas/pas-book-factory.c (pas_book_factory_dispose): same. * backend/pas/pas-backend-summary.c (pas_backend_summary_dispose): same. * backend/pas/pas-backend-ldap.c (pas_backend_ldap_dispose): same. * backend/pas/pas-backend-file.c (pas_backend_file_dispose): same. * backend/ebook/e-book-listener.c (e_book_listener_dispose): guard against multiple invocations. * backend/ebook/e-card.c (e_card_dispose): same. * backend/ebook/e-card-simple.c (e_card_simple_dispose): same. * backend/ebook/e-card-cursor.c (e_card_cursor_dispose): same. * backend/ebook/e-book.c (e_book_dispose): same. * backend/ebook/e-book-view-listener.c (e_book_view_listener_dispose): same. svn path=/trunk/; revision=18687 --- addressbook/backend/ebook/e-card.c | 72 ++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 35 deletions(-) (limited to 'addressbook/backend/ebook/e-card.c') diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c index f98269dff5..07926ddd84 100644 --- a/addressbook/backend/ebook/e-card.c +++ b/addressbook/backend/ebook/e-card.c @@ -1997,42 +1997,44 @@ static void e_card_dispose (GObject *object) { ECard *card = E_CARD(object); - g_free(card->id); - if (card->book) - g_object_unref (card->book); - g_free(card->file_as); - g_free(card->fname); - e_card_name_unref(card->name); - g_free(card->bday); - - g_free(card->url); - g_free(card->org); - g_free(card->org_unit); - g_free(card->office); - g_free(card->title); - g_free(card->role); - g_free(card->manager); - g_free(card->assistant); - g_free(card->nickname); - g_free(card->spouse); - g_free(card->anniversary); - g_free(card->caluri); - g_free(card->fburl); - g_free(card->note); - g_free(card->related_contacts); - if (card->categories) - g_object_unref(card->categories); - if (card->email) - g_object_unref(card->email); - if (card->phone) - g_object_unref(card->phone); - if (card->address) - g_object_unref(card->address); - if (card->address_label) - g_object_unref(card->address_label); - - G_OBJECT_CLASS (parent_class)->dispose (object); +#define FREE_IF(x) do { if ((x)) { g_free (x); x = NULL; } } while (0) +#define UNREF_IF(x) do { if ((x)) { g_object_unref (x); x = NULL; } } while (0) + + FREE_IF (card->id); + UNREF_IF (card->book); + FREE_IF(card->file_as); + FREE_IF(card->fname); + if (card->name) { + e_card_name_unref(card->name); + card->name = NULL; + } + FREE_IF(card->bday); + + FREE_IF(card->url); + FREE_IF(card->org); + FREE_IF(card->org_unit); + FREE_IF(card->office); + FREE_IF(card->title); + FREE_IF(card->role); + FREE_IF(card->manager); + FREE_IF(card->assistant); + FREE_IF(card->nickname); + FREE_IF(card->spouse); + FREE_IF(card->anniversary); + FREE_IF(card->caluri); + FREE_IF(card->fburl); + FREE_IF(card->note); + FREE_IF(card->related_contacts); + + UNREF_IF (card->categories); + UNREF_IF (card->email); + UNREF_IF (card->phone); + UNREF_IF (card->address); + UNREF_IF (card->address_label); + + if (G_OBJECT_CLASS (parent_class)->dispose) + G_OBJECT_CLASS (parent_class)->dispose (object); } -- cgit v1.2.3