aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog12
-rw-r--r--addressbook/backend/ebook/e-book-view-listener.c5
-rw-r--r--addressbook/backend/ebook/e-book.c4
3 files changed, 20 insertions, 1 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 4476aeef0b..574018a310 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,15 @@
+2001-08-05 Radek Doulik <rodo@ximian.com>
+
+ * backend/ebook/e-book.c (e_book_do_response_get_view): set
+ op->listener to NULL to catch possible use of freed op
+ (e_book_do_response_get_changes): ditto
+
+ * backend/ebook/e-book-view-listener.c
+ (e_book_view_listener_check_queue): this callback could be (and
+ indeed is) called from signal emited above,
+ signal handler could call e_book_view_listener_stop, so we need to check
+ if idle is still set and if not we don't want to unref again
+
2001-08-04 Christopher James Lahey <clahey@ximian.com>
* backend/ebook/e-card-compare.c (e_card_compare_name): Made it so
diff --git a/addressbook/backend/ebook/e-book-view-listener.c b/addressbook/backend/ebook/e-book-view-listener.c
index 7e0f6d5c29..761cf12281 100644
--- a/addressbook/backend/ebook/e-book-view-listener.c
+++ b/addressbook/backend/ebook/e-book-view-listener.c
@@ -47,7 +47,10 @@ e_book_view_listener_check_queue (EBookViewListener *listener)
e_book_view_listener_signals [RESPONSES_QUEUED]);
}
- if (listener->priv->response_queue == NULL) {
+ /* this callback could be (and indeed is) called from signal emited above,
+ signal handler could call e_book_view_listener_stop, so we need to check
+ if idle is still set and if not we don't want to unref again */
+ if (listener->priv->response_queue == NULL && listener->priv->idle_id != 0) {
listener->priv->idle_id = 0;
bonobo_object_unref (BONOBO_OBJECT (listener));
return FALSE;
diff --git a/addressbook/backend/ebook/e-book.c b/addressbook/backend/ebook/e-book.c
index 9c8111b714..b141a71f43 100644
--- a/addressbook/backend/ebook/e-book.c
+++ b/addressbook/backend/ebook/e-book.c
@@ -290,6 +290,8 @@ e_book_do_response_get_view (EBook *book,
}
bonobo_object_unref(BONOBO_OBJECT(op->listener));
+ op->listener = NULL;
+
g_free (op);
}
@@ -342,6 +344,8 @@ e_book_do_response_get_changes (EBook *book,
}
bonobo_object_unref(BONOBO_OBJECT(op->listener));
+ op->listener = NULL;
+
g_free (op);
}