aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/ebook/e-book-view-listener.c
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/backend/ebook/e-book-view-listener.c')
-rw-r--r--addressbook/backend/ebook/e-book-view-listener.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/addressbook/backend/ebook/e-book-view-listener.c b/addressbook/backend/ebook/e-book-view-listener.c
index 4ad674ccd8..8433d1cc29 100644
--- a/addressbook/backend/ebook/e-book-view-listener.c
+++ b/addressbook/backend/ebook/e-book-view-listener.c
@@ -33,12 +33,31 @@ struct _EBookViewListenerPrivate {
static gboolean
e_book_view_listener_check_queue (EBookViewListener *listener)
{
+ static gint thrash = 0;
+ gint queue_len;
+
+ queue_len = g_list_length (listener->priv->response_queue);
+
bonobo_object_ref (BONOBO_OBJECT (listener));
if (listener->priv->response_queue != NULL) {
gtk_signal_emit (GTK_OBJECT (listener),
e_book_view_listener_signals [RESPONSES_QUEUED]);
}
+ /* This means we didn't make any progress in dealing with what is on our
+ response queue. */
+ if (queue_len == g_list_length (listener->priv->response_queue))
+ ++thrash;
+ else
+ thrash = 0;
+
+ if (thrash > 20) {
+ g_error ("e_book_view_listener_check_queue thrashing!");
+ thrash = 0;
+ listener->priv->idle_id = 0;
+ return FALSE;
+ }
+
if (listener->priv->response_queue == NULL) {
listener->priv->idle_id = 0;
bonobo_object_unref (BONOBO_OBJECT (listener));