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:

committed by
Jon Trowbridge

parent
04dd664175
commit
dfd9f83933
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user