[evolution-data-server] Use conditional locks in camel-folder
- From: Chenthill Palanisamy <pchen src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Use conditional locks in camel-folder
- Date: Fri, 29 Jan 2010 08:53:16 +0000 (UTC)
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]