[evolution-data-server] Use conditional locks in camel-folder



commit efaf311ef1a0a9a05e7aeaee878b133e435e2bc6
Author: Srinivasa Ragavan <sragavan gnome org>
Date:   Fri Jan 29 14:22:59 2010 +0530

    Use conditional locks in camel-folder

 camel/camel-folder.c                       |    7 +++++++
 camel/camel-folder.h                       |    2 ++
 camel/camel-private.h                      |    5 +++--
 camel/providers/imapx/camel-imapx-folder.c |    1 +
 4 files changed, 13 insertions(+), 2 deletions(-)
---
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index bf6edce..c21c735 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -192,6 +192,7 @@ camel_folder_init (gpointer object, gpointer klass)
 	folder->priv = g_malloc0(sizeof(*folder->priv));
 	folder->priv->frozen = 0;
 	folder->priv->changed_frozen = camel_folder_change_info_new();
+	folder->priv->async_rec_locks = FALSE;
 	g_static_rec_mutex_init(&folder->priv->lock);
 	g_static_mutex_init(&folder->priv->change_lock);
 }
@@ -222,6 +223,12 @@ camel_folder_finalize (CamelObject *object)
 	g_free(p);
 }
 
+void
+camel_folder_set_lock_async (CamelFolder *folder, gboolean async)
+{
+	folder->priv->async_rec_locks = async;
+}
+
 CamelType
 camel_folder_get_type (void)
 {
diff --git a/camel/camel-folder.h b/camel/camel-folder.h
index 990c1a4..4a9c1a9 100644
--- a/camel/camel-folder.h
+++ b/camel/camel-folder.h
@@ -233,6 +233,8 @@ void               camel_folder_refresh_info           (CamelFolder *folder,
 void               camel_folder_sync                   (CamelFolder *folder,
 							gboolean expunge,
 							CamelException *ex);
+void		   camel_folder_set_lock_async 	       (CamelFolder *folder, 
+							gboolean async);
 
 CamelStore *       camel_folder_get_parent_store       (CamelFolder *folder);
 
diff --git a/camel/camel-private.h b/camel/camel-private.h
index e6ddb84..a556f7e 100644
--- a/camel/camel-private.h
+++ b/camel/camel-private.h
@@ -40,6 +40,7 @@ struct _CamelFolderPrivate {
 	/* must require the 'change_lock' to access this */
 	gint frozen;
 	struct _CamelFolderChangeInfo *changed_frozen; /* queues changed events */
+	gboolean async_rec_locks;
 };
 
 #define CAMEL_FOLDER_LOCK(f, l) \
@@ -47,9 +48,9 @@ struct _CamelFolderPrivate {
 #define CAMEL_FOLDER_UNLOCK(f, l) \
 	(g_static_mutex_unlock(&((CamelFolder *) (f))->priv->l))
 #define CAMEL_FOLDER_REC_LOCK(f, l) \
-	(g_static_rec_mutex_lock(&((CamelFolder *) (f))->priv->l))
+	if (((CamelFolder *) (f))->priv->async_rec_locks == FALSE) g_static_rec_mutex_lock(&((CamelFolder *) (f))->priv->l);
 #define CAMEL_FOLDER_REC_UNLOCK(f, l) \
-	(g_static_rec_mutex_unlock(&((CamelFolder *) (f))->priv->l))
+	if (((CamelFolder *) (f))->priv->async_rec_locks == FALSE) g_static_rec_mutex_unlock(&((CamelFolder *) (f))->priv->l);
 
 struct _CamelStorePrivate {
 	GStaticRecMutex folder_lock;	/* for locking folder operations */
diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c
index 19be6ea..744363a 100644
--- a/camel/providers/imapx/camel-imapx-folder.c
+++ b/camel/providers/imapx/camel-imapx-folder.c
@@ -371,6 +371,7 @@ imap_folder_init(CamelObject *o, CamelObjectClass *klass)
 		CAMEL_MESSAGE_DELETED | CAMEL_MESSAGE_DRAFT |
 		CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_USER;
 
+	camel_folder_set_lock_async (folder, TRUE);
 }
 
 static void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]