[evolution-mapi] CamelMapiSettings: Add thread-safe accessors for string properties.



commit a54ff2813b027a0c334161dedde9fb82adadc0f9
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu May 3 13:27:31 2012 -0400

    CamelMapiSettings: Add thread-safe accessors for string properties.

 src/libexchangemapi/camel-mapi-settings.c |   71 +++++++++++++++++++++++++++++
 src/libexchangemapi/camel-mapi-settings.h |    3 +
 2 files changed, 74 insertions(+), 0 deletions(-)
---
diff --git a/src/libexchangemapi/camel-mapi-settings.c b/src/libexchangemapi/camel-mapi-settings.c
index 12f8e5a..4005ba3 100644
--- a/src/libexchangemapi/camel-mapi-settings.c
+++ b/src/libexchangemapi/camel-mapi-settings.c
@@ -23,6 +23,8 @@
 	((obj), CAMEL_TYPE_MAPI_SETTINGS, CamelMapiSettingsPrivate))
 
 struct _CamelMapiSettingsPrivate {
+	GMutex *property_lock;
+
 	gboolean check_all;
 	gboolean filter_junk;
 	gboolean filter_junk_inbox;
@@ -257,6 +259,8 @@ mapi_settings_finalize (GObject *object)
 
 	priv = CAMEL_MAPI_SETTINGS_GET_PRIVATE (object);
 
+	g_mutex_free (priv->property_lock);
+
 	g_free (priv->domain);
 	g_free (priv->profile);
 	g_free (priv->realm);
@@ -408,6 +412,7 @@ static void
 camel_mapi_settings_init (CamelMapiSettings *settings)
 {
 	settings->priv = CAMEL_MAPI_SETTINGS_GET_PRIVATE (settings);
+	settings->priv->property_lock = g_mutex_new ();
 }
 
 gboolean
@@ -437,6 +442,24 @@ camel_mapi_settings_get_domain (CamelMapiSettings *settings)
 	return settings->priv->domain;
 }
 
+gchar *
+camel_mapi_settings_dup_domain (CamelMapiSettings *settings)
+{
+	const gchar *protected;
+	gchar *duplicate;
+
+	g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
+
+	g_mutex_lock (settings->priv->property_lock);
+
+	protected = camel_mapi_settings_get_domain (settings);
+	duplicate = g_strdup (protected);
+
+	g_mutex_unlock (settings->priv->property_lock);
+
+	return duplicate;
+}
+
 void
 camel_mapi_settings_set_domain (CamelMapiSettings *settings,
                                 const gchar *domain)
@@ -447,9 +470,13 @@ camel_mapi_settings_set_domain (CamelMapiSettings *settings,
 	if (domain == NULL)
 		domain = "";
 
+	g_mutex_lock (settings->priv->property_lock);
+
 	g_free (settings->priv->domain);
 	settings->priv->domain = g_strdup (domain);
 
+	g_mutex_unlock (settings->priv->property_lock);
+
 	g_object_notify (G_OBJECT (settings), "domain");
 }
 
@@ -518,15 +545,37 @@ camel_mapi_settings_get_profile (CamelMapiSettings *settings)
 	return settings->priv->profile;
 }
 
+gchar *
+camel_mapi_settings_dup_profile (CamelMapiSettings *settings)
+{
+	const gchar *protected;
+	gchar *duplicate;
+
+	g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
+
+	g_mutex_lock (settings->priv->property_lock);
+
+	protected = camel_mapi_settings_get_profile (settings);
+	duplicate = g_strdup (protected);
+
+	g_mutex_unlock (settings->priv->property_lock);
+
+	return duplicate;
+}
+
 void
 camel_mapi_settings_set_profile (CamelMapiSettings *settings,
                                  const gchar *profile)
 {
 	g_return_if_fail (CAMEL_IS_MAPI_SETTINGS (settings));
 
+	g_mutex_lock (settings->priv->property_lock);
+
 	g_free (settings->priv->profile);
 	settings->priv->profile = g_strdup (profile);
 
+	g_mutex_unlock (settings->priv->property_lock);
+
 	g_object_notify (G_OBJECT (settings), "profile");
 }
 
@@ -538,6 +587,24 @@ camel_mapi_settings_get_realm (CamelMapiSettings *settings)
 	return settings->priv->realm;
 }
 
+gchar *
+camel_mapi_settings_dup_realm (CamelMapiSettings *settings)
+{
+	const gchar *protected;
+	gchar *duplicate;
+
+	g_return_val_if_fail (CAMEL_IS_MAPI_SETTINGS (settings), NULL);
+
+	g_mutex_lock (settings->priv->property_lock);
+
+	protected = camel_mapi_settings_get_realm (settings);
+	duplicate = g_strdup (protected);
+
+	g_mutex_unlock (settings->priv->property_lock);
+
+	return duplicate;
+}
+
 void
 camel_mapi_settings_set_realm (CamelMapiSettings *settings,
                                const gchar *realm)
@@ -548,9 +615,13 @@ camel_mapi_settings_set_realm (CamelMapiSettings *settings,
 	if (realm == NULL)
 		realm = "";
 
+	g_mutex_lock (settings->priv->property_lock);
+
 	g_free (settings->priv->realm);
 	settings->priv->realm = g_strdup (realm);
 
+	g_mutex_unlock (settings->priv->property_lock);
+
 	g_object_notify (G_OBJECT (settings), "realm");
 }
 
diff --git a/src/libexchangemapi/camel-mapi-settings.h b/src/libexchangemapi/camel-mapi-settings.h
index 64e256c..55cc67d 100644
--- a/src/libexchangemapi/camel-mapi-settings.h
+++ b/src/libexchangemapi/camel-mapi-settings.h
@@ -63,6 +63,7 @@ void		camel_mapi_settings_set_check_all
 						(CamelMapiSettings *settings,
 						 gboolean check_all);
 const gchar *	camel_mapi_settings_get_domain	(CamelMapiSettings *settings);
+gchar *		camel_mapi_settings_dup_domain	(CamelMapiSettings *settings);
 void		camel_mapi_settings_set_domain	(CamelMapiSettings *settings,
 						 const gchar *domain);
 gboolean	camel_mapi_settings_get_filter_junk
@@ -81,9 +82,11 @@ void		camel_mapi_settings_set_kerberos
 						(CamelMapiSettings *settings,
 						 gboolean kerberos);
 const gchar *	camel_mapi_settings_get_profile	(CamelMapiSettings *settings);
+gchar *		camel_mapi_settings_dup_profile	(CamelMapiSettings *settings);
 void		camel_mapi_settings_set_profile	(CamelMapiSettings *settings,
 						 const gchar *profile);
 const gchar *	camel_mapi_settings_get_realm	(CamelMapiSettings *settings);
+gchar *		camel_mapi_settings_dup_realm	(CamelMapiSettings *settings);
 void		camel_mapi_settings_set_realm	(CamelMapiSettings *settings,
 						 const gchar *realm);
 gboolean	camel_mapi_settings_get_listen_notifications



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