Added paranoid reentrancy guards. (pas_book_queue_request): Changed our

2001-10-27  Jon Trowbridge  <trow@ximian.com>

	* backend/pas/pas-book.c (pas_book_check_queue): Added paranoid
	reentrancy guards.
	(pas_book_queue_request): Changed our idle handler into a timeout,
	so as to work w/ reentrancy guards.
	(pas_book_init): Explicit initialization.

svn path=/trunk/; revision=14202
This commit is contained in:
Jon Trowbridge
2001-10-27 05:27:40 +00:00
committed by Jon Trowbridge
parent 04dd664175
commit dfd9f83933
2 changed files with 25 additions and 5 deletions

View File

@ -1,3 +1,11 @@
2001-10-27 Jon Trowbridge <trow@ximian.com>
* backend/pas/pas-book.c (pas_book_check_queue): Added paranoid
reentrancy guards.
(pas_book_queue_request): Changed our idle handler into a timeout,
so as to work w/ reentrancy guards.
(pas_book_init): Explicit initialization.
2001-10-26 Chris Toshok <toshok@ximian.com> 2001-10-26 Chris Toshok <toshok@ximian.com>
* gui/component/addressbook.h: add prototypes for * gui/component/addressbook.h: add prototypes for

View File

@ -25,23 +25,33 @@ struct _PASBookPrivate {
GNOME_Evolution_Addressbook_BookListener listener; GNOME_Evolution_Addressbook_BookListener listener;
GList *request_queue; GList *request_queue;
gint idle_id; gint timeout_id;
guint timeout_lock : 1;
}; };
static gboolean static gboolean
pas_book_check_queue (PASBook *book) pas_book_check_queue (PASBook *book)
{ {
if (book->priv->timeout_lock)
return TRUE;
book->priv->timeout_lock = TRUE;
if (book->priv->request_queue != NULL) { if (book->priv->request_queue != NULL) {
gtk_signal_emit (GTK_OBJECT (book), gtk_signal_emit (GTK_OBJECT (book),
pas_book_signals [REQUESTS_QUEUED]); pas_book_signals [REQUESTS_QUEUED]);
} }
if (book->priv->request_queue == NULL) { if (book->priv->request_queue == NULL) {
book->priv->idle_id = 0; book->priv->timeout_id = 0;
book->priv->timeout_lock = FALSE;
gtk_object_unref (GTK_OBJECT (book)); gtk_object_unref (GTK_OBJECT (book));
return FALSE; return FALSE;
} }
book->priv->timeout_lock = FALSE;
return TRUE; return TRUE;
} }
@ -51,9 +61,9 @@ pas_book_queue_request (PASBook *book, PASRequest *req)
book->priv->request_queue = book->priv->request_queue =
g_list_append (book->priv->request_queue, req); g_list_append (book->priv->request_queue, req);
if (book->priv->idle_id == 0) { if (book->priv->timeout_id == 0) {
gtk_object_ref (GTK_OBJECT (book)); gtk_object_ref (GTK_OBJECT (book));
book->priv->idle_id = g_idle_add ((GSourceFunc) pas_book_check_queue, book); book->priv->timeout_id = g_timeout_add (20, (GSourceFunc) pas_book_check_queue, book);
} }
} }
@ -839,8 +849,10 @@ static void
pas_book_init (PASBook *book) pas_book_init (PASBook *book)
{ {
book->priv = g_new0 (PASBookPrivate, 1); book->priv = g_new0 (PASBookPrivate, 1);
book->priv->idle_id = 0; book->priv->timeout_id = 0;
book->priv->request_queue = NULL; book->priv->request_queue = NULL;
book->priv->timeout_id = 0;
book->priv->timeout_lock = FALSE;
} }
/** /**