[evolution-data-server] CamelService: Make "password" property thread-safe.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] CamelService: Make "password" property thread-safe.
- Date: Wed, 6 Nov 2013 12:47:56 +0000 (UTC)
commit 021031fffd40ea14d56d22eccc42a82b975c80dc
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Nov 5 11:26:02 2013 -0500
CamelService: Make "password" property thread-safe.
New functions:
camel_service_dup_password()
camel/camel-service.c | 43 ++++++++++++++++++++++++++++--
camel/camel-service.h | 1 +
docs/reference/camel/camel-sections.txt | 1 +
3 files changed, 42 insertions(+), 3 deletions(-)
---
diff --git a/camel/camel-service.c b/camel/camel-service.c
index cc2e92d..0fd6c78 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -617,9 +617,9 @@ service_get_property (GObject *object,
return;
case PROP_PASSWORD:
- g_value_set_string (
+ g_value_take_string (
value,
- camel_service_get_password (
+ camel_service_dup_password (
CAMEL_SERVICE (object)));
return;
@@ -1413,6 +1413,37 @@ camel_service_get_password (CamelService *service)
}
/**
+ * camel_service_dup_password:
+ * @service: a #CamelService
+ *
+ * Thread-safe variation of camel_service_get_password().
+ * Use this function when accessing @service from multiple threads.
+ *
+ * The returned string should be freed with g_free() when no longer needed.
+ *
+ * Returns: a newly-allocated copy of #CamelService:password
+ *
+ * Since: 3.12
+ **/
+gchar *
+camel_service_dup_password (CamelService *service)
+{
+ const gchar *protected;
+ gchar *duplicate;
+
+ g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
+
+ g_mutex_lock (&service->priv->property_lock);
+
+ protected = camel_service_get_password (service);
+ duplicate = g_strdup (protected);
+
+ g_mutex_unlock (&service->priv->property_lock);
+
+ return duplicate;
+}
+
+/**
* camel_service_set_password:
* @service: a #CamelService
* @password: the password for @service
@@ -1429,12 +1460,18 @@ camel_service_set_password (CamelService *service,
{
g_return_if_fail (CAMEL_IS_SERVICE (service));
- if (g_strcmp0 (service->priv->password, password) == 0)
+ g_mutex_lock (&service->priv->property_lock);
+
+ if (g_strcmp0 (service->priv->password, password) == 0) {
+ g_mutex_unlock (&service->priv->property_lock);
return;
+ }
g_free (service->priv->password);
service->priv->password = g_strdup (password);
+ g_mutex_unlock (&service->priv->property_lock);
+
g_object_notify (G_OBJECT (service), "password");
}
diff --git a/camel/camel-service.h b/camel/camel-service.h
index b0c5655..2c92e89 100644
--- a/camel/camel-service.h
+++ b/camel/camel-service.h
@@ -176,6 +176,7 @@ gchar * camel_service_dup_display_name (CamelService *service);
void camel_service_set_display_name (CamelService *service,
const gchar *display_name);
const gchar * camel_service_get_password (CamelService *service);
+gchar * camel_service_dup_password (CamelService *service);
void camel_service_set_password (CamelService *service,
const gchar *password);
const gchar * camel_service_get_user_data_dir (CamelService *service);
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index f3cbe0c..805dee6 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -1917,6 +1917,7 @@ camel_service_get_display_name
camel_service_dup_display_name
camel_service_set_display_name
camel_service_get_password
+camel_service_dup_password
camel_service_set_password
camel_service_get_user_data_dir
camel_service_get_user_cache_dir
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]