[evolution-data-server] CamelService: Make "display-name" property thread-safe.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] CamelService: Make "display-name" property thread-safe.
- Date: Wed, 6 Nov 2013 12:47:51 +0000 (UTC)
commit 77ef6fca1831bd1774f0b68ae9f8baace059bd69
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Nov 5 11:11:35 2013 -0500
CamelService: Make "display-name" property thread-safe.
New functions:
camel_service_dup_display_name()
camel/camel-service.c | 47 +++++++++++++++++++++++++++---
camel/camel-service.h | 1 +
docs/reference/camel/camel-sections.txt | 1 +
3 files changed, 44 insertions(+), 5 deletions(-)
---
diff --git a/camel/camel-service.c b/camel/camel-service.c
index 6a45a36..cc2e92d 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -610,9 +610,9 @@ service_get_property (GObject *object,
return;
case PROP_DISPLAY_NAME:
- g_value_set_string (
+ g_value_take_string (
value,
- camel_service_get_display_name (
+ camel_service_dup_display_name (
CAMEL_SERVICE (object)));
return;
@@ -1325,6 +1325,37 @@ camel_service_get_display_name (CamelService *service)
}
/**
+ * camel_service_dup_display_name:
+ * @service: a #CamelService
+ *
+ * Thread-safe variation of camel_service_get_display_name().
+ * 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:display-name
+ *
+ * Since: 3.12
+ **/
+gchar *
+camel_service_dup_display_name (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_display_name (service);
+ duplicate = g_strdup (protected);
+
+ g_mutex_unlock (&service->priv->property_lock);
+
+ return duplicate;
+}
+
+/**
* camel_service_set_display_name:
* @service: a #CamelService
* @display_name: a valid UTF-8 string, or %NULL
@@ -1344,15 +1375,21 @@ camel_service_set_display_name (CamelService *service,
{
g_return_if_fail (CAMEL_IS_SERVICE (service));
- if (g_strcmp0 (service->priv->display_name, display_name) == 0)
- return;
-
if (display_name != NULL)
g_return_if_fail (g_utf8_validate (display_name, -1, NULL));
+ g_mutex_lock (&service->priv->property_lock);
+
+ if (g_strcmp0 (service->priv->display_name, display_name) == 0) {
+ g_mutex_unlock (&service->priv->property_lock);
+ return;
+ }
+
g_free (service->priv->display_name);
service->priv->display_name = g_strdup (display_name);
+ g_mutex_unlock (&service->priv->property_lock);
+
g_object_notify (G_OBJECT (service), "display-name");
}
diff --git a/camel/camel-service.h b/camel/camel-service.h
index b17c0ba..b0c5655 100644
--- a/camel/camel-service.h
+++ b/camel/camel-service.h
@@ -172,6 +172,7 @@ CamelServiceConnectionStatus
camel_service_get_connection_status
(CamelService *service);
const gchar * camel_service_get_display_name (CamelService *service);
+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);
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index 383373c..f3cbe0c 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -1914,6 +1914,7 @@ camel_service_new_camel_url
CamelServiceConnectionStatus
camel_service_get_connection_status
camel_service_get_display_name
+camel_service_dup_display_name
camel_service_set_display_name
camel_service_get_password
camel_service_set_password
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]