[evolution-data-server] Rename camel_service_get_settings().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Rename camel_service_get_settings().
- Date: Sun, 12 Aug 2012 20:07:42 +0000 (UTC)
commit 444dd5e097ecfe63e2a70f9c813e80e47d8c99e5
Author: Matthew Barnes <mbarnes redhat com>
Date: Sun Aug 12 13:52:58 2012 -0400
Rename camel_service_get_settings().
Applying lessons learned from ESourceRegistry.
Rename camel_service_get_settings() to camel_service_ref_settings()
and have it return a new reference.
When returning a pointer to a reference-counted object in a multi-
threaded environment, always increase the object's reference count
before returning so as to transfer a new reference to the caller.
Otherwise it introduces a potential race where the reference-counted
object may lose its last reference and be freed while the caller is
still using the object. Even if the caller immediately increments
the object's reference count, it's still a potential race.
Transferring a new reference to the caller means the caller must
unreference the object when finished with it so the object will be
properly freed when it's no longer needed.
camel/camel-disco-folder.c | 5 +-
camel/camel-disco-store.c | 10 +++-
camel/camel-imapx-conn-manager.c | 5 +-
camel/camel-imapx-folder.c | 5 +-
camel/camel-imapx-server.c | 65 ++++++++++++++++----
camel/camel-imapx-store.c | 36 +++++++++--
camel/camel-imapx-utils.c | 6 ++-
camel/camel-network-service.c | 4 +-
camel/camel-offline-folder.c | 5 +-
camel/camel-offline-store.c | 10 +++-
camel/camel-sasl-cram-md5.c | 5 +-
camel/camel-sasl-digest-md5.c | 5 +-
camel/camel-sasl-gssapi.c | 5 +-
camel/camel-sasl-login.c | 5 +-
camel/camel-sasl-ntlm.c | 10 +++-
camel/camel-sasl-plain.c | 5 +-
camel/camel-service.c | 45 ++++++++++----
camel/camel-service.h | 2 +-
camel/providers/imap/camel-imap-command.c | 5 +-
camel/providers/imap/camel-imap-folder.c | 46 ++++++++++----
camel/providers/imap/camel-imap-store.c | 84 +++++++++++++++++++-------
camel/providers/imap/camel-imap-wrapper.c | 5 +-
camel/providers/local/camel-local-folder.c | 20 ++++---
camel/providers/local/camel-local-store.c | 34 ++++++++--
camel/providers/local/camel-maildir-folder.c | 5 +-
camel/providers/local/camel-maildir-store.c | 47 ++++++++++++---
camel/providers/local/camel-mbox-store.c | 11 +++-
camel/providers/local/camel-mh-store.c | 25 ++++++--
camel/providers/local/camel-spool-folder.c | 5 +-
camel/providers/local/camel-spool-store.c | 25 ++++++--
camel/providers/nntp/camel-nntp-folder.c | 5 +-
camel/providers/nntp/camel-nntp-store.c | 34 ++++++++--
camel/providers/nntp/camel-nntp-summary.c | 10 +++-
camel/providers/pop3/camel-pop3-folder.c | 42 ++++++++-----
camel/providers/pop3/camel-pop3-store.c | 36 ++++++++----
camel/providers/smtp/camel-smtp-transport.c | 12 +++-
docs/reference/camel/camel-sections.txt | 2 +-
37 files changed, 520 insertions(+), 166 deletions(-)
---
diff --git a/camel/camel-disco-folder.c b/camel/camel-disco-folder.c
index 9f54f68..368854f 100644
--- a/camel/camel-disco-folder.c
+++ b/camel/camel-disco-folder.c
@@ -113,14 +113,17 @@ cdf_folder_changed (CamelFolder *folder,
service = CAMEL_SERVICE (parent_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
sync_folder = camel_disco_folder_get_offline_sync (
CAMEL_DISCO_FOLDER (folder));
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (changes->uid_added->len > 0 && (sync_folder || sync_store)) {
struct _cdf_sync_data *data;
diff --git a/camel/camel-disco-store.c b/camel/camel-disco-store.c
index 54df118..f13ca90 100644
--- a/camel/camel-disco-store.c
+++ b/camel/camel-disco-store.c
@@ -284,15 +284,18 @@ disco_store_set_status (CamelDiscoStore *disco_store,
store = CAMEL_STORE (disco_store);
service = CAMEL_SERVICE (disco_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
network_available = camel_session_get_network_available (session);
store_is_online = (disco_store->status == CAMEL_DISCO_STORE_ONLINE);
going_offline = (status == CAMEL_DISCO_STORE_OFFLINE);
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (network_available) {
if (store_is_online && going_offline && store->folders != NULL) {
GPtrArray *folders;
@@ -485,7 +488,6 @@ camel_disco_store_prepare_for_offline (CamelDiscoStore *disco_store,
store = CAMEL_STORE (disco_store);
service = CAMEL_SERVICE (disco_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
/* We can't prepare for offline if we're already offline. */
if (!camel_session_get_network_available (session))
@@ -494,9 +496,13 @@ camel_disco_store_prepare_for_offline (CamelDiscoStore *disco_store,
/* Sync the folder fully if we've been told to
* sync offline for this store or this folder. */
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
store_is_online = (disco_store->status == CAMEL_DISCO_STORE_ONLINE);
if (store_is_online && store->folders != NULL) {
diff --git a/camel/camel-imapx-conn-manager.c b/camel/camel-imapx-conn-manager.c
index 1a721f6..916ef78 100644
--- a/camel/camel-imapx-conn-manager.c
+++ b/camel/camel-imapx-conn-manager.c
@@ -492,12 +492,15 @@ imapx_find_connection_unlocked (CamelIMAPXConnManager *con_man,
/* Caller must be holding CON_WRITE_LOCK. */
service = CAMEL_SERVICE (con_man->priv->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
concurrent_connections =
camel_imapx_settings_get_concurrent_connections (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
/* XXX Have a dedicated connection for INBOX ? */
list = con_man->priv->connections;
diff --git a/camel/camel-imapx-folder.c b/camel/camel-imapx-folder.c
index ab78c46..089ff01 100644
--- a/camel/camel-imapx-folder.c
+++ b/camel/camel-imapx-folder.c
@@ -69,7 +69,8 @@ camel_imapx_folder_new (CamelStore *store,
d("opening imap folder '%s'\n", folder_dir);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
g_object_get (
settings,
@@ -79,6 +80,8 @@ camel_imapx_folder_new (CamelStore *store,
"filter-junk-inbox", &filter_junk_inbox,
NULL);
+ g_object_unref (settings);
+
short_name = strrchr (folder_name, '/');
if (short_name)
short_name++;
diff --git a/camel/camel-imapx-server.c b/camel/camel-imapx-server.c
index ead3166..bf5561e 100644
--- a/camel/camel-imapx-server.c
+++ b/camel/camel-imapx-server.c
@@ -1928,7 +1928,6 @@ imapx_untagged (CamelIMAPXServer *is,
gboolean ok = FALSE;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
priv = CAMEL_IMAPX_SERVER_GET_PRIVATE (is);
/* If priv->context is not NULL here, it basically means that
@@ -1939,10 +1938,14 @@ imapx_untagged (CamelIMAPXServer *is,
g_return_val_if_fail (priv->context == NULL, FALSE);
priv->context = g_new0 (CamelIMAPXServerUntaggedContext, 1);
+ settings = camel_service_ref_settings (service);
+
priv->context->lsub = FALSE;
priv->context->fetch_order = camel_imapx_settings_get_fetch_order (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
e(is->tagprefix, "got untagged response\n");
priv->context->id = 0;
priv->context->tok = camel_imapx_stream_token (is->stream,
@@ -3075,13 +3078,16 @@ connect_to_server_process (CamelIMAPXServer *is,
service = CAMEL_SERVICE (is->store);
password = camel_service_get_password (service);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
/* Put full details in the environment, in case the connection
* program needs them */
camel_url_set_protocol (&url, provider->protocol);
@@ -3200,7 +3206,8 @@ imapx_connect_to_server (CamelIMAPXServer *is,
#endif
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
@@ -3213,7 +3220,11 @@ imapx_connect_to_server (CamelIMAPXServer *is,
if (use_shell_command)
shell_command = camel_imapx_settings_dup_shell_command (
CAMEL_IMAPX_SETTINGS (settings));
+#endif
+ g_object_unref (settings);
+
+#ifndef G_OS_WIN32
if (shell_command != NULL) {
gboolean success;
@@ -3407,12 +3418,15 @@ camel_imapx_server_authenticate (CamelIMAPXServer *is,
CAMEL_AUTHENTICATION_REJECTED);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (mechanism != NULL) {
if (!g_hash_table_lookup (is->cinfo->auth_types, mechanism)) {
g_set_error (
@@ -3514,7 +3528,8 @@ imapx_reconnect (CamelIMAPXServer *is,
service = CAMEL_SERVICE (is->store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
mechanism = camel_network_settings_dup_auth_mechanism (
CAMEL_NETWORK_SETTINGS (settings));
@@ -3525,6 +3540,8 @@ imapx_reconnect (CamelIMAPXServer *is,
use_qresync = camel_imapx_settings_get_use_qresync (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!imapx_connect_to_server (is, cancellable, error))
goto exception;
@@ -4150,13 +4167,16 @@ imapx_command_step_fetch_done (CamelIMAPXServer *is,
isum = (CamelIMAPXSummary *) job->folder->summary;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
batch_count = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
i = data->index;
//printf("%s: Mobile mode: %d Fetch Count %d\n", camel_folder_get_display_name (job->folder), mobile_mode, batch_count);
@@ -4292,13 +4312,16 @@ imapx_job_scan_changes_done (CamelIMAPXServer *is,
data->scan_changes = FALSE;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
uidset_size = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (camel_imapx_command_set_error_if_failed (ic, error)) {
g_prefix_error (
error, "%s: ",
@@ -4463,10 +4486,14 @@ imapx_job_scan_changes_start (CamelIMAPXJob *job,
gchar *uid = NULL;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (mobile_mode)
uid = imapx_get_uid_from_index (job->folder->summary, 0);
@@ -4600,7 +4627,8 @@ imapx_job_fetch_new_messages_start (CamelIMAPXJob *job,
g_return_if_fail (data != NULL);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
fetch_order = camel_imapx_settings_get_fetch_order (
CAMEL_IMAPX_SETTINGS (settings));
@@ -4608,6 +4636,8 @@ imapx_job_fetch_new_messages_start (CamelIMAPXJob *job,
uidset_size = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
total = camel_folder_summary_count (folder->summary);
diff = ifolder->exists_on_server - total;
@@ -4676,7 +4706,8 @@ imapx_job_fetch_messages_start (CamelIMAPXJob *job,
g_return_if_fail (data != NULL);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
fetch_order = camel_imapx_settings_get_fetch_order (
CAMEL_IMAPX_SETTINGS (settings));
@@ -4689,6 +4720,8 @@ imapx_job_fetch_messages_start (CamelIMAPXJob *job,
uidset_size = camel_imapx_settings_get_batch_fetch_count (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (ftype == CAMEL_FETCH_NEW_MESSAGES ||
(ftype == CAMEL_FETCH_OLD_MESSAGES && total <=0 )) {
@@ -4803,10 +4836,14 @@ imapx_job_refresh_info_start (CamelIMAPXJob *job,
gboolean mobile_mode;
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
full_name = camel_folder_get_full_name (folder);
/* Sync changes first, else unread count will not
@@ -5487,10 +5524,14 @@ imapx_command_sync_changes_done (CamelIMAPXServer *is,
g_return_val_if_fail (data != NULL, FALSE);
service = CAMEL_SERVICE (is->store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
job->commands--;
full_name = camel_folder_get_full_name (job->folder);
diff --git a/camel/camel-imapx-store.c b/camel/camel-imapx-store.c
index 2875649..f482217 100644
--- a/camel/camel-imapx-store.c
+++ b/camel/camel-imapx-store.c
@@ -144,12 +144,14 @@ imapx_get_name (CamelService *service,
gchar *user;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("IMAP server %s"), host);
@@ -390,10 +392,13 @@ fill_fi (CamelStore *store,
CamelSettings *settings;
gboolean mobile_mode;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
folder = camel_object_bag_peek (store->folders, fi->full_name);
if (folder) {
CamelIMAPXSummary *ims;
@@ -686,7 +691,8 @@ get_folder_info_offline (CamelStore *store,
gint i;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
use_namespace = camel_imapx_settings_get_use_namespace (
CAMEL_IMAPX_SETTINGS (settings));
@@ -694,6 +700,8 @@ get_folder_info_offline (CamelStore *store,
use_subscriptions = camel_imapx_settings_get_use_subscriptions (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
/* FIXME: obey other flags */
folders = g_ptr_array_new ();
@@ -707,10 +715,15 @@ get_folder_info_offline (CamelStore *store,
if (top[0] == 0) {
gchar *namespace = NULL;
- if (use_namespace)
+ if (use_namespace) {
+ settings = camel_service_ref_settings (service);
+
namespace = camel_imapx_settings_dup_namespace (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+ }
+
if (namespace != NULL) {
name = g_strdup (imapx_store->summary->namespaces->personal->full_name);
top = imapx_store->summary->namespaces->personal->path;
@@ -1121,7 +1134,8 @@ imapx_can_refresh_folder (CamelStore *store,
store_class = CAMEL_STORE_CLASS (camel_imapx_store_parent_class);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
check_all = camel_imapx_settings_get_check_all (
CAMEL_IMAPX_SETTINGS (settings));
@@ -1129,6 +1143,8 @@ imapx_can_refresh_folder (CamelStore *store,
check_subscribed = camel_imapx_settings_get_check_subscribed (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
subscribed = ((info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
res = store_class->can_refresh_folder (store, info, &local_error) ||
@@ -1194,11 +1210,14 @@ imapx_store_get_folder_info_sync (CamelStore *store,
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
use_subscriptions = camel_imapx_settings_get_use_subscriptions (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (top == NULL)
top = "";
@@ -1485,12 +1504,15 @@ imapx_store_rename_folder_sync (CamelStore *store,
gboolean success = FALSE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
use_subscriptions = camel_imapx_settings_get_use_subscriptions (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store))) {
g_set_error (
error, CAMEL_SERVICE_ERROR,
diff --git a/camel/camel-imapx-utils.c b/camel/camel-imapx-utils.c
index 9fc871a..408f760 100644
--- a/camel/camel-imapx-utils.c
+++ b/camel/camel-imapx-utils.c
@@ -318,10 +318,14 @@ imapx_update_store_summary (CamelFolder *folder)
full_name = camel_folder_get_full_name (folder);
parent_store = camel_folder_get_parent_store (folder);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
+
mobile_mode = camel_imapx_settings_get_mobile_mode (
CAMEL_IMAPX_SETTINGS (settings));
+ g_object_unref (settings);
+
si = camel_store_summary_path ((CamelStoreSummary *) ((CamelIMAPXStore *) parent_store)->summary, full_name);
if (si) {
guint32 unread, total;
diff --git a/camel/camel-network-service.c b/camel/camel-network-service.c
index b600c3f..2396c85 100644
--- a/camel/camel-network-service.c
+++ b/camel/camel-network-service.c
@@ -53,7 +53,7 @@ network_service_connect_sync (CamelNetworkService *service,
gint status;
session = camel_service_get_session (CAMEL_SERVICE (service));
- settings = camel_service_get_settings (CAMEL_SERVICE (service));
+ settings = camel_service_ref_settings (CAMEL_SERVICE (service));
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
@@ -61,6 +61,8 @@ network_service_connect_sync (CamelNetworkService *service,
host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
+ g_object_unref (settings);
+
service_name = camel_network_service_get_service_name (service, method);
default_port = camel_network_service_get_default_port (service, method);
diff --git a/camel/camel-offline-folder.c b/camel/camel-offline-folder.c
index e092117..0a4af88 100644
--- a/camel/camel-offline-folder.c
+++ b/camel/camel-offline-folder.c
@@ -135,11 +135,14 @@ offline_folder_changed (CamelFolder *folder,
service = CAMEL_SERVICE (parent_store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
sync_folder = camel_offline_folder_get_offline_sync (
CAMEL_OFFLINE_FOLDER (folder));
diff --git a/camel/camel-offline-store.c b/camel/camel-offline-store.c
index a3b94e0..f54df73 100644
--- a/camel/camel-offline-store.c
+++ b/camel/camel-offline-store.c
@@ -125,14 +125,17 @@ camel_offline_store_set_online_sync (CamelOfflineStore *store,
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
network_available = camel_session_get_network_available (session);
store_is_online = camel_offline_store_get_online (store);
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
/* Returning to online mode is the simpler case. */
if (!store_is_online) {
store->priv->online = online;
@@ -201,14 +204,17 @@ camel_offline_store_prepare_for_offline_sync (CamelOfflineStore *store,
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
network_available = camel_session_get_network_available (session);
store_is_online = camel_offline_store_get_online (store);
+ settings = camel_service_ref_settings (service);
+
sync_store = camel_offline_settings_get_stay_synchronized (
CAMEL_OFFLINE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (network_available && store_is_online) {
GPtrArray *folders;
guint ii;
diff --git a/camel/camel-sasl-cram-md5.c b/camel/camel-sasl-cram-md5.c
index ebe4402..d409b97 100644
--- a/camel/camel-sasl-cram-md5.c
+++ b/camel/camel-sasl-cram-md5.c
@@ -84,11 +84,14 @@ sasl_cram_md5_challenge_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
diff --git a/camel/camel-sasl-digest-md5.c b/camel/camel-sasl-digest-md5.c
index cb48b28..4114b9f 100644
--- a/camel/camel-sasl-digest-md5.c
+++ b/camel/camel-sasl-digest-md5.c
@@ -827,12 +827,15 @@ sasl_digest_md5_challenge_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
service_name = camel_sasl_get_service_name (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
if (host == NULL)
diff --git a/camel/camel-sasl-gssapi.c b/camel/camel-sasl-gssapi.c
index 62c8885..75745e2 100644
--- a/camel/camel-sasl-gssapi.c
+++ b/camel/camel-sasl-gssapi.c
@@ -292,12 +292,15 @@ sasl_gssapi_challenge_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
service_name = camel_sasl_get_service_name (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
if (host == NULL)
diff --git a/camel/camel-sasl-login.c b/camel/camel-sasl-login.c
index a80b302..78510d4 100644
--- a/camel/camel-sasl-login.c
+++ b/camel/camel-sasl-login.c
@@ -79,11 +79,14 @@ sasl_login_challenge_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
diff --git a/camel/camel-sasl-ntlm.c b/camel/camel-sasl-ntlm.c
index 4012b04..1b3ef79 100644
--- a/camel/camel-sasl-ntlm.c
+++ b/camel/camel-sasl-ntlm.c
@@ -703,11 +703,14 @@ sasl_ntlm_challenge_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
@@ -890,11 +893,14 @@ sasl_ntlm_try_empty_password_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), FALSE);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, FALSE);
cp = strchr (user, '\\');
diff --git a/camel/camel-sasl-plain.c b/camel/camel-sasl-plain.c
index 1f04e48..2340642 100644
--- a/camel/camel-sasl-plain.c
+++ b/camel/camel-sasl-plain.c
@@ -67,11 +67,14 @@ sasl_plain_challenge_sync (CamelSasl *sasl,
service = camel_sasl_get_service (sasl);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (user != NULL, NULL);
password = camel_service_get_password (service);
diff --git a/camel/camel-service.c b/camel/camel-service.c
index a0350f2..b069c4d 100644
--- a/camel/camel-service.c
+++ b/camel/camel-service.c
@@ -58,6 +58,8 @@ struct _CamelServicePrivate {
gpointer session; /* weak pointer */
CamelSettings *settings;
+ GMutex *settings_lock;
+
CamelProvider *provider;
gchar *display_name;
@@ -617,8 +619,8 @@ service_get_property (GObject *object,
return;
case PROP_SETTINGS:
- g_value_set_object (
- value, camel_service_get_settings (
+ g_value_take_object (
+ value, camel_service_ref_settings (
CAMEL_SERVICE (object)));
return;
@@ -665,6 +667,8 @@ service_finalize (GObject *object)
CAMEL_SERVICE_GET_CLASS (object)->disconnect_sync (
CAMEL_SERVICE (object), TRUE, NULL, NULL);
+ g_mutex_free (priv->settings_lock);
+
g_free (priv->display_name);
g_free (priv->user_data_dir);
g_free (priv->user_cache_dir);
@@ -1133,6 +1137,7 @@ camel_service_init (CamelService *service)
{
service->priv = CAMEL_SERVICE_GET_PRIVATE (service);
+ service->priv->settings_lock = g_mutex_new ();
service->priv->connection_lock = g_mutex_new ();
service->priv->status = CAMEL_SERVICE_DISCONNECTED;
}
@@ -1204,10 +1209,10 @@ camel_service_new_camel_url (CamelService *service)
g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
-
g_return_val_if_fail (provider != NULL, NULL);
+ settings = camel_service_ref_settings (service);
+
/* Allocate as camel_url_new_with_base() does. */
url = g_new0 (CamelURL, 1);
@@ -1237,6 +1242,8 @@ camel_service_new_camel_url (CamelService *service)
g_free (user);
g_free (path);
+ g_object_unref (settings);
+
return url;
}
@@ -1461,24 +1468,35 @@ camel_service_get_session (CamelService *service)
}
/**
- * camel_service_get_settings:
+ * camel_service_ref_settings:
* @service: a #CamelService
*
* Returns the #CamelSettings instance associated with the service.
*
+ * The returned #CamelSettings is referenced for thread-safety and must
+ * be unreferenced with g_object_unref() when finished with it.
+ *
* Returns: the #CamelSettings
*
- * Since: 3.2
+ * Since: 3.6
**/
CamelSettings *
-camel_service_get_settings (CamelService *service)
+camel_service_ref_settings (CamelService *service)
{
+ CamelSettings *settings;
+
g_return_val_if_fail (CAMEL_IS_SERVICE (service), NULL);
/* Every service should have a settings object. */
- g_warn_if_fail (service->priv->settings != NULL);
+ g_return_val_if_fail (service->priv->settings != NULL, NULL);
+
+ g_mutex_lock (service->priv->settings_lock);
+
+ settings = g_object_ref (service->priv->settings);
+
+ g_mutex_unlock (service->priv->settings_lock);
- return service->priv->settings;
+ return settings;
}
/**
@@ -1502,9 +1520,6 @@ camel_service_set_settings (CamelService *service,
g_return_if_fail (CAMEL_IS_SERVICE (service));
- if (settings && service->priv->settings == settings)
- return;
-
class = CAMEL_SERVICE_GET_CLASS (service);
if (settings != NULL) {
@@ -1522,10 +1537,14 @@ camel_service_set_settings (CamelService *service,
settings = g_object_new (class->settings_type, NULL);
}
+ g_mutex_lock (service->priv->settings_lock);
+
if (service->priv->settings != NULL)
g_object_unref (service->priv->settings);
- service->priv->settings = settings;
+ service->priv->settings = settings; /* takes ownership */
+
+ g_mutex_unlock (service->priv->settings_lock);
g_object_notify (G_OBJECT (service), "settings");
}
diff --git a/camel/camel-service.h b/camel/camel-service.h
index 3d17795..f3714aa 100644
--- a/camel/camel-service.h
+++ b/camel/camel-service.h
@@ -185,7 +185,7 @@ gchar * camel_service_get_name (CamelService *service,
CamelProvider * camel_service_get_provider (CamelService *service);
struct _CamelSession *
camel_service_get_session (CamelService *service);
-CamelSettings * camel_service_get_settings (CamelService *service);
+CamelSettings * camel_service_ref_settings (CamelService *service);
void camel_service_set_settings (CamelService *service,
CamelSettings *settings);
const gchar * camel_service_get_uid (CamelService *service);
diff --git a/camel/providers/imap/camel-imap-command.c b/camel/providers/imap/camel-imap-command.c
index 5f11957..9815f85 100644
--- a/camel/providers/imap/camel-imap-command.c
+++ b/camel/providers/imap/camel-imap-command.c
@@ -356,12 +356,15 @@ camel_imap_command_response (CamelImapStore *store,
service = CAMEL_SERVICE (store);
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (camel_imap_store_readline (store, &respbuf, cancellable, error) < 0) {
g_static_rec_mutex_unlock (&store->command_and_response_lock);
type = CAMEL_IMAP_RESPONSE_ERROR;
diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c
index fc30f31..427a6db 100644
--- a/camel/providers/imap/camel-imap-folder.c
+++ b/camel/providers/imap/camel-imap-folder.c
@@ -285,25 +285,31 @@ imap_folder_constructed (GObject *object)
CamelFolder *folder;
CamelStore *parent_store;
const gchar *full_name;
- const gchar *host;
- const gchar *user;
gchar *description;
+ gchar *host;
+ gchar *user;
folder = CAMEL_FOLDER (object);
full_name = camel_folder_get_full_name (folder);
parent_store = camel_folder_get_parent_store (folder);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
- user = camel_network_settings_get_user (network_settings);
+ host = camel_network_settings_dup_host (network_settings);
+ user = camel_network_settings_dup_user (network_settings);
+
+ g_object_unref (settings);
description = g_strdup_printf (
"%s %s:%s", user, host, full_name);
camel_folder_set_description (folder, description);
g_free (description);
+
+ g_free (host);
+ g_free (user);
}
static void
@@ -479,7 +485,7 @@ camel_imap_folder_new (CamelStore *parent,
}
service = CAMEL_SERVICE (parent);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
g_object_get (
settings,
@@ -539,6 +545,8 @@ camel_imap_folder_new (CamelStore *parent,
g_free (trash_path);
}
+ g_object_unref (settings);
+
imap_folder->search = camel_imap_search_new (folder_dir);
camel_store_summary_connect_folder_summary (
@@ -1568,11 +1576,14 @@ is_google_account (CamelStore *store)
g_return_val_if_fail (CAMEL_IS_STORE (store), FALSE);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
is_google =
(host != NULL) && (
host_ends_with (host, "gmail.com") ||
@@ -1635,7 +1646,6 @@ imap_synchronize_sync (CamelFolder *folder,
is_gmail = is_google_account (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
if (folder->permanent_flags == 0 || !camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store))) {
if (expunge) {
@@ -1656,6 +1666,8 @@ imap_synchronize_sync (CamelFolder *folder,
camel_folder_sort_uids (folder, summary);
max = summary->len;
+ settings = camel_service_ref_settings (service);
+
/* deleted_uids is NULL when not using real trash */
folder_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
@@ -1670,9 +1682,6 @@ imap_synchronize_sync (CamelFolder *folder,
}
g_free (folder_path);
- if (real_trash)
- deleted_uids = g_ptr_array_new ();
-
/* junked_uids is NULL when not using real junk */
folder_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
@@ -1688,6 +1697,11 @@ imap_synchronize_sync (CamelFolder *folder,
}
g_free (folder_path);
+ g_object_unref (settings);
+
+ if (real_trash)
+ deleted_uids = g_ptr_array_new ();
+
if (real_junk)
junked_uids = g_ptr_array_new ();
@@ -2827,11 +2841,14 @@ do_copy (CamelFolder *source,
return FALSE;
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
mark_moved = is_google_account (parent_store) && trash_path != NULL;
full_name = camel_folder_get_full_name (destination);
@@ -3955,17 +3972,20 @@ imap_update_summary (CamelFolder *folder,
parent_store = camel_folder_get_parent_store (folder);
store = CAMEL_IMAP_STORE (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
if (!camel_imap_store_connected (store, error))
return FALSE;
+ settings = camel_service_ref_settings (service);
+
fetch_headers = camel_imap_settings_get_fetch_headers (
CAMEL_IMAP_SETTINGS (settings));
extra_headers = camel_imap_settings_dup_fetch_headers_extra (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
if (store->server_level >= IMAP_LEVEL_IMAP4REV1) {
if (fetch_headers == CAMEL_FETCH_HEADERS_ALL)
header_spec = g_string_new ("HEADER");
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index 5d95e5c..1ce6bb8 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -149,7 +149,7 @@ imap_store_update_store_flags (CamelStore *store)
* to take effect. */
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
imap_settings = CAMEL_IMAP_SETTINGS (settings);
real_path = camel_imap_settings_dup_real_junk_path (imap_settings);
@@ -174,6 +174,8 @@ imap_store_update_store_flags (CamelStore *store)
store->flags |= CAMEL_STORE_VTRASH;
g_free (real_path);
+
+ g_object_unref (settings);
}
static void
@@ -300,12 +302,14 @@ connect_to_server (CamelService *service,
if (tcp_stream == NULL)
return FALSE;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
+ g_object_unref (settings);
+
store->ostream = tcp_stream;
store->istream = camel_stream_buffer_new (tcp_stream, CAMEL_STREAM_BUFFER_READ);
@@ -526,13 +530,16 @@ connect_to_server_process (CamelService *service,
password = camel_service_get_password (service);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
port = camel_network_settings_get_port (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
camel_url_set_protocol (&url, provider->protocol);
camel_url_set_host (&url, host);
camel_url_set_port (&url, port);
@@ -678,12 +685,15 @@ connect_to_server_wrapper (CamelService *service,
gboolean use_shell_command;
gboolean success;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
+
shell_command = camel_imap_settings_dup_shell_command (
CAMEL_IMAP_SETTINGS (settings));
use_shell_command = camel_imap_settings_get_use_shell_command (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
#ifndef G_OS_WIN32
if (use_shell_command && shell_command != NULL)
success = connect_to_server_process (
@@ -713,12 +723,15 @@ imap_auth_loop (CamelService *service,
gboolean success = TRUE;
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
mechanism = camel_network_settings_dup_auth_mechanism (network_settings);
+ g_object_unref (settings);
+
if (store->preauthed) {
if (camel_verbose_debug)
fprintf(stderr, "Server %s has preauthenticated us.\n",
@@ -799,12 +812,14 @@ imap_store_get_name (CamelService *service,
gchar *user;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("IMAP server %s"), host);
@@ -832,9 +847,6 @@ imap_store_connect_sync (CamelService *service,
const gchar *namespace;
GError *local_error = NULL;
- settings = camel_service_get_settings (service);
- imap_settings = CAMEL_IMAP_SETTINGS (settings);
-
if (!camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store)))
return TRUE;
@@ -849,6 +861,9 @@ imap_store_connect_sync (CamelService *service,
return FALSE;
}
+ settings = camel_service_ref_settings (service);
+ imap_settings = CAMEL_IMAP_SETTINGS (settings);
+
/* Get namespace and hierarchy separator */
if (store->capabilities & IMAP_CAPABILITY_NAMESPACE) {
struct _namespaces *namespaces;
@@ -1014,6 +1029,8 @@ imap_store_connect_sync (CamelService *service,
}
done:
+ g_object_unref (settings);
+
/* save any changes we had */
camel_store_summary_save ((CamelStoreSummary *) store->summary);
@@ -1041,9 +1058,6 @@ imap_store_disconnect_sync (CamelService *service,
CamelSettings *settings;
CamelImapSettings *imap_settings;
- settings = camel_service_get_settings (service);
- imap_settings = CAMEL_IMAP_SETTINGS (settings);
-
if (camel_offline_store_get_online (CAMEL_OFFLINE_STORE (store)) && clean) {
CamelImapResponse *response;
@@ -1078,9 +1092,14 @@ imap_store_disconnect_sync (CamelService *service,
g_hash_table_remove_all (store->known_alerts);
+ settings = camel_service_ref_settings (service);
+ imap_settings = CAMEL_IMAP_SETTINGS (settings);
+
if (camel_imap_settings_get_use_namespace (imap_settings))
camel_imap_settings_set_namespace (imap_settings, NULL);
+ g_object_unref (settings);
+
return TRUE;
}
@@ -1106,11 +1125,14 @@ imap_store_authenticate_sync (CamelService *service,
gchar *user;
password = camel_service_get_password (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (user == NULL) {
g_set_error_literal (
error, CAMEL_SERVICE_ERROR,
@@ -1756,9 +1778,10 @@ imap_store_get_trash_folder_sync (CamelStore *store,
gchar *trash_path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
trash_path = camel_imap_settings_dup_real_trash_path (
CAMEL_IMAP_SETTINGS (settings));
if (trash_path != NULL) {
@@ -1770,6 +1793,8 @@ imap_store_get_trash_folder_sync (CamelStore *store,
}
g_free (trash_path);
+ g_object_unref (settings);
+
if (folder)
return folder;
@@ -1804,9 +1829,10 @@ imap_store_get_junk_folder_sync (CamelStore *store,
gchar *junk_path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
if (junk_path != NULL) {
@@ -1818,6 +1844,8 @@ imap_store_get_junk_folder_sync (CamelStore *store,
}
g_free (junk_path);
+ g_object_unref (settings);
+
if (folder)
return folder;
@@ -2360,12 +2388,15 @@ imap_store_rename_folder_sync (CamelStore *store,
gboolean success = TRUE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
use_subscriptions = camel_imap_settings_get_use_subscriptions (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!camel_imap_store_connected (imap_store, error)) {
success = FALSE;
goto fail;
@@ -2914,11 +2945,14 @@ refresh_refresh (CamelSession *session,
gchar *namespace;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
namespace = camel_imap_settings_dup_namespace (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
camel_operation_push_message (cancellable,
_("Retrieving list of folders at '%s'"),
camel_service_get_display_name (service));
@@ -3059,7 +3093,8 @@ get_folder_info_offline (CamelStore *store,
printf("get folder info offline\n");
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
use_subscriptions = camel_imap_settings_get_use_subscriptions (
CAMEL_IMAP_SETTINGS (settings));
@@ -3067,13 +3102,15 @@ get_folder_info_offline (CamelStore *store,
junk_path = camel_imap_settings_dup_real_junk_path (
CAMEL_IMAP_SETTINGS (settings));
+ trash_path = camel_imap_settings_dup_real_trash_path (
+ CAMEL_IMAP_SETTINGS (settings));
+
+ g_object_unref (settings);
+
/* So we can safely compare strings. */
if (junk_path == NULL)
junk_path = g_strdup ("");
- trash_path = camel_imap_settings_dup_real_trash_path (
- CAMEL_IMAP_SETTINGS (settings));
-
/* So we can safely compare strings. */
if (trash_path == NULL)
trash_path = g_strdup ("");
@@ -3309,7 +3346,8 @@ imap_can_refresh_folder (CamelStore *store,
GError *local_error = NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
check_all = camel_imap_settings_get_check_all (
CAMEL_IMAP_SETTINGS (settings));
@@ -3317,6 +3355,8 @@ imap_can_refresh_folder (CamelStore *store,
check_subscribed = camel_imap_settings_get_check_subscribed (
CAMEL_IMAP_SETTINGS (settings));
+ g_object_unref (settings);
+
subscribed = ((info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
res = CAMEL_STORE_CLASS (camel_imap_store_parent_class)->
diff --git a/camel/providers/imap/camel-imap-wrapper.c b/camel/providers/imap/camel-imap-wrapper.c
index 6e0c78b..defd169 100644
--- a/camel/providers/imap/camel-imap-wrapper.c
+++ b/camel/providers/imap/camel-imap-wrapper.c
@@ -177,7 +177,8 @@ camel_imap_wrapper_new (CamelImapFolder *imap_folder,
store = camel_folder_get_parent_store (CAMEL_FOLDER (imap_folder));
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
sync_offline =
camel_offline_settings_get_stay_synchronized (
@@ -185,6 +186,8 @@ camel_imap_wrapper_new (CamelImapFolder *imap_folder,
camel_offline_folder_get_offline_sync (
CAMEL_OFFLINE_FOLDER (imap_folder));
+ g_object_unref (settings);
+
imap_wrapper = g_object_new (CAMEL_TYPE_IMAP_WRAPPER, NULL);
camel_data_wrapper_set_mime_type_field (CAMEL_DATA_WRAPPER (imap_wrapper), type);
((CamelDataWrapper *) imap_wrapper)->offline = !sync_offline;
diff --git a/camel/providers/local/camel-local-folder.c b/camel/providers/local/camel-local-folder.c
index a90edd7..037c0d1 100644
--- a/camel/providers/local/camel-local-folder.c
+++ b/camel/providers/local/camel-local-folder.c
@@ -161,9 +161,9 @@ local_folder_constructed (GObject *object)
CamelFolder *folder;
CamelStore *parent_store;
const gchar *full_name;
- const gchar *root_path;
const gchar *tmp;
gchar *description;
+ gchar *root_path;
gchar *path;
folder = CAMEL_FOLDER (object);
@@ -172,10 +172,13 @@ local_folder_constructed (GObject *object)
service = CAMEL_SERVICE (parent_store);
provider = camel_service_get_provider (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- root_path = camel_local_settings_get_path (local_settings);
+ root_path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
if (root_path == NULL)
return;
@@ -222,6 +225,7 @@ local_folder_constructed (GObject *object)
camel_folder_set_description (folder, description);
g_free (description);
+ g_free (root_path);
g_free (path);
}
@@ -540,7 +544,6 @@ camel_local_folder_construct (CamelLocalFolder *lf,
CamelLocalStore *ls;
CamelStore *parent_store;
const gchar *full_name;
- const gchar *path;
gboolean need_summary_check;
folder = CAMEL_FOLDER (lf);
@@ -548,16 +551,17 @@ camel_local_folder_construct (CamelLocalFolder *lf,
parent_store = camel_folder_get_parent_store (folder);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
- path = camel_local_settings_get_path (local_settings);
+ lf->base_path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
ls = CAMEL_LOCAL_STORE (parent_store);
need_summary_check = camel_local_store_get_need_summary_check (ls);
- lf->base_path = g_strdup (path);
-
lf->folder_path = camel_local_store_get_full_path (ls, full_name);
lf->index_path = camel_local_store_get_meta_path(ls, full_name, ".ibex");
statepath = camel_local_store_get_meta_path(ls, full_name, ".cmeta");
diff --git a/camel/providers/local/camel-local-store.c b/camel/providers/local/camel-local-store.c
index 48421a8..033d8e5 100644
--- a/camel/providers/local/camel-local-store.c
+++ b/camel/providers/local/camel-local-store.c
@@ -167,11 +167,13 @@ local_store_get_name (CamelService *service,
gchar *path;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup (path);
else
@@ -206,11 +208,14 @@ local_store_get_folder_sync (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings= camel_service_get_settings (service);
+
+ settings= camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (!g_path_is_absolute (path)) {
g_set_error (
error, CAMEL_STORE_ERROR,
@@ -361,11 +366,14 @@ local_store_create_folder_sync (CamelStore *store,
struct stat st;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* This is a pretty hacky version of create folder, but should basically work */
if (!g_path_is_absolute (path)) {
@@ -430,11 +438,14 @@ local_store_delete_folder_sync (CamelStore *store,
gboolean success = TRUE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* remove metadata only */
name = g_build_filename (path, folder_name, NULL);
str = g_strdup_printf ("%s.ibex", name);
@@ -512,11 +523,14 @@ local_store_rename_folder_sync (CamelStore *store,
gboolean success = TRUE;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
old_basename = g_strdup_printf ("%s.ibex", old);
new_basename = g_strdup_printf ("%s.ibex", new);
@@ -606,11 +620,14 @@ local_store_get_full_path (CamelLocalStore *ls,
gchar *path;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
filename = g_build_filename (path, full_name, NULL);
g_free (path);
@@ -631,11 +648,14 @@ local_store_get_meta_path (CamelLocalStore *ls,
gchar *path;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
basename = g_strconcat (full_name, ext, NULL);
filename = g_build_filename (path, basename, NULL);
g_free (basename);
diff --git a/camel/providers/local/camel-maildir-folder.c b/camel/providers/local/camel-maildir-folder.c
index 22a7b6e..2f573c8 100644
--- a/camel/providers/local/camel-maildir-folder.c
+++ b/camel/providers/local/camel-maildir-folder.c
@@ -482,11 +482,14 @@ camel_maildir_folder_new (CamelStore *parent_store,
NULL);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
filter_inbox = camel_store_settings_get_filter_inbox (
CAMEL_STORE_SETTINGS (settings));
+ g_object_unref (settings);
+
if (filter_inbox && strcmp (full_name, ".") == 0)
folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
diff --git a/camel/providers/local/camel-maildir-store.c b/camel/providers/local/camel-maildir-store.c
index db00da6..d589941 100644
--- a/camel/providers/local/camel-maildir-store.c
+++ b/camel/providers/local/camel-maildir-store.c
@@ -89,11 +89,14 @@ maildir_store_create_folder_sync (CamelStore *store,
/* This is a pretty hacky version of create folder, but should basically work */
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (!g_path_is_absolute (path)) {
g_set_error (
error, CAMEL_STORE_ERROR,
@@ -176,11 +179,14 @@ maildir_store_get_folder_sync (CamelStore *store,
CamelFolder *folder = NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
folder_name = md_canon_name (folder_name);
dir_name = maildir_full_name_to_dir_name (folder_name);
@@ -303,11 +309,14 @@ maildir_store_delete_folder_sync (CamelStore *store,
}
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* maildir++ directory names start with a '.' */
dir_name = maildir_full_name_to_dir_name (folder_name);
name = g_build_filename (path, dir_name, NULL);
@@ -410,11 +419,14 @@ fill_fi (CamelStore *store,
gchar *root;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
root = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* This should be fast enough not to have to test for INFO_FAST */
dir_name = maildir_full_name_to_dir_name (fi->full_name);
@@ -457,10 +469,14 @@ scan_fi (CamelStore *store,
struct stat st;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (path != NULL, NULL);
fi = camel_folder_info_new ();
@@ -551,10 +567,14 @@ scan_dirs (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (path != NULL, -1);
folders = g_ptr_array_new ();
@@ -849,11 +869,14 @@ maildir_get_full_path (CamelLocalStore *ls,
gchar *path;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
dir_name = maildir_full_name_to_dir_name (full_name);
filename = g_build_filename (path, dir_name, NULL);
g_free (dir_name);
@@ -877,11 +900,14 @@ maildir_get_meta_path (CamelLocalStore *ls,
gchar *tmp;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
dir_name = maildir_full_name_to_dir_name (full_name);
tmp = g_build_filename (path, dir_name, NULL);
filename = g_strconcat (tmp, ext, NULL);
@@ -938,11 +964,14 @@ scan_old_dir_info (CamelStore *store,
gint res = -1;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
visited = g_hash_table_new (scan_hash, scan_equal);
sn = g_malloc0 (sizeof (*sn));
diff --git a/camel/providers/local/camel-mbox-store.c b/camel/providers/local/camel-mbox-store.c
index e7ab514..4e400a4 100644
--- a/camel/providers/local/camel-mbox-store.c
+++ b/camel/providers/local/camel-mbox-store.c
@@ -541,11 +541,14 @@ mbox_store_create_folder_sync (CamelStore *store,
struct stat st;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
root_path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
local_store = CAMEL_LOCAL_STORE (store);
if (!g_path_is_absolute (root_path)) {
@@ -909,10 +912,14 @@ mbox_store_get_full_path (CamelLocalStore *ls,
const gchar *cp;
service = CAMEL_SERVICE (ls);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
root_path = camel_local_settings_dup_path (local_settings);
+
+ g_object_unref (settings);
+
g_return_val_if_fail (root_path != NULL, NULL);
full_path = g_string_new (root_path);
diff --git a/camel/providers/local/camel-mh-store.c b/camel/providers/local/camel-mh-store.c
index acdb963..27f7328 100644
--- a/camel/providers/local/camel-mh-store.c
+++ b/camel/providers/local/camel-mh-store.c
@@ -209,11 +209,14 @@ fill_fi (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* This should be fast enough not to have to test for INFO_FAST */
/* We could: if we have no folder, and FAST isn't specified,
@@ -498,7 +501,8 @@ mh_store_get_folder_sync (CamelStore *store,
return NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
@@ -506,6 +510,8 @@ mh_store_get_folder_sync (CamelStore *store,
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
name = g_build_filename (path, folder_name, NULL);
if (g_stat (name, &st) == -1) {
@@ -585,7 +591,8 @@ mh_store_get_folder_info_sync (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
@@ -593,6 +600,8 @@ mh_store_get_folder_info_sync (CamelStore *store,
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
/* use .folders if we are supposed to */
if (use_dot_folders) {
folders_scan (
@@ -653,7 +662,8 @@ mh_store_delete_folder_sync (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
@@ -661,6 +671,8 @@ mh_store_delete_folder_sync (CamelStore *store,
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
/* remove folder directory - will fail if not empty */
name = g_build_filename (path, folder_name, NULL);
if (rmdir (name) == -1) {
@@ -705,7 +717,8 @@ mh_store_rename_folder_sync (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
@@ -713,6 +726,8 @@ mh_store_rename_folder_sync (CamelStore *store,
use_dot_folders = camel_mh_settings_get_use_dot_folders (
CAMEL_MH_SETTINGS (settings));
+ g_object_unref (settings);
+
/* Chain up to parent's rename_folder() method. */
store_class = CAMEL_STORE_CLASS (camel_mh_store_parent_class);
success = store_class->rename_folder_sync (
diff --git a/camel/providers/local/camel-spool-folder.c b/camel/providers/local/camel-spool-folder.c
index 1c085e4..16089c7 100644
--- a/camel/providers/local/camel-spool-folder.c
+++ b/camel/providers/local/camel-spool-folder.c
@@ -145,7 +145,8 @@ camel_spool_folder_new (CamelStore *parent_store,
gchar *basename;
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
filter_inbox = camel_store_settings_get_filter_inbox (
CAMEL_STORE_SETTINGS (settings));
@@ -153,6 +154,8 @@ camel_spool_folder_new (CamelStore *parent_store,
use_xstatus_headers = camel_spool_settings_get_use_xstatus_headers (
CAMEL_SPOOL_SETTINGS (settings));
+ g_object_unref (settings);
+
basename = g_path_get_basename (full_name);
folder = g_object_new (
diff --git a/camel/providers/local/camel-spool-store.c b/camel/providers/local/camel-spool-store.c
index 29d7cc9..7b53997 100644
--- a/camel/providers/local/camel-spool-store.c
+++ b/camel/providers/local/camel-spool-store.c
@@ -72,11 +72,14 @@ spool_store_get_type (CamelSpoolStore *spool_store,
gchar *path;
service = CAMEL_SERVICE (spool_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* Check the path for validity while we have the opportunity. */
if (path == NULL || *path != '/') {
@@ -346,11 +349,14 @@ get_folder_info_elm (CamelStore *store,
gchar *path;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
visited = g_hash_table_new (inode_hash, inode_equal);
if (scan_dir (
@@ -402,11 +408,14 @@ spool_store_get_name (CamelService *service,
gchar *path;
spool_store = CAMEL_SPOOL_STORE (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
if (brief)
return path;
@@ -466,11 +475,14 @@ spool_store_get_folder_sync (CamelStore *store,
return NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
/* we only support an 'INBOX' in mbox mode */
if (type == CAMEL_SPOOL_STORE_MBOX) {
if (strcmp(folder_name, "INBOX") != 0) {
@@ -632,11 +644,14 @@ spool_store_get_full_path (CamelLocalStore *local_store,
gchar *path;
service = CAMEL_SERVICE (local_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
local_settings = CAMEL_LOCAL_SETTINGS (settings);
path = camel_local_settings_dup_path (local_settings);
+ g_object_unref (settings);
+
spool_store = CAMEL_SPOOL_STORE (local_store);
switch (spool_store_get_type (spool_store, NULL)) {
diff --git a/camel/providers/nntp/camel-nntp-folder.c b/camel/providers/nntp/camel-nntp-folder.c
index f7f792c..3d775f8 100644
--- a/camel/providers/nntp/camel-nntp-folder.c
+++ b/camel/providers/nntp/camel-nntp-folder.c
@@ -768,14 +768,17 @@ camel_nntp_folder_new (CamelStore *parent,
gboolean filter_all;
service = CAMEL_SERVICE (parent);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
g_object_get (
settings,
"filter-all", &filter_all,
NULL);
+ g_object_unref (settings);
+
folder = g_object_new (
CAMEL_TYPE_NNTP_FOLDER,
"display-name", folder_name,
diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 0974dcb..4d2827e 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -261,13 +261,16 @@ connect_to_server (CamelService *service,
gchar *user;
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
user_cache_dir = camel_service_get_user_cache_dir (service);
+ settings = camel_service_ref_settings (service);
+
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
@@ -447,11 +450,13 @@ nntp_store_get_name (CamelService *service,
gchar *host;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf ("%s", host);
else
@@ -482,11 +487,14 @@ nntp_store_authenticate_sync (CamelService *service,
store = CAMEL_NNTP_STORE (service);
password = camel_service_get_password (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (user == NULL) {
g_set_error_literal (
error, CAMEL_SERVICE_ERROR,
@@ -709,11 +717,14 @@ nntp_store_get_subscribed_folder_info (CamelNNTPStore *store,
return NULL;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
short_folder_names = camel_nntp_settings_get_short_folder_names (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
for (i = 0; i < camel_store_summary_count ((CamelStoreSummary *) store->summary); i++) {
si = camel_store_summary_index ((CamelStoreSummary *) store->summary, i);
if (si == NULL)
@@ -862,12 +873,15 @@ nntp_store_get_cached_folder_info (CamelNNTPStore *store,
gint toplen = strlen (top);
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
folder_hierarchy_relative =
camel_nntp_settings_get_folder_hierarchy_relative (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
known = g_hash_table_new (g_str_hash, g_str_equal);
for (i = 0; (si = camel_store_summary_index ((CamelStoreSummary *) store->summary, i)); i++) {
@@ -1358,11 +1372,14 @@ nntp_store_subscribe_folder_sync (CamelSubscribable *subscribable,
gboolean success = TRUE;
service = CAMEL_SERVICE (subscribable);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
short_folder_names = camel_nntp_settings_get_short_folder_names (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
si = camel_store_summary_path (CAMEL_STORE_SUMMARY (nntp_store->summary), folder_name);
if (!si) {
g_set_error (
@@ -1402,11 +1419,14 @@ nntp_store_unsubscribe_folder_sync (CamelSubscribable *subscribable,
gboolean success = TRUE;
service = CAMEL_SERVICE (subscribable);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
short_folder_names = camel_nntp_settings_get_short_folder_names (
CAMEL_NNTP_SETTINGS (settings));
+ g_object_unref (settings);
+
fitem = camel_store_summary_path (CAMEL_STORE_SUMMARY (nntp_store->summary), folder_name);
if (!fitem) {
diff --git a/camel/providers/nntp/camel-nntp-summary.c b/camel/providers/nntp/camel-nntp-summary.c
index fa7c9ad..a2189b3 100644
--- a/camel/providers/nntp/camel-nntp-summary.c
+++ b/camel/providers/nntp/camel-nntp-summary.c
@@ -186,11 +186,14 @@ add_range_xover (CamelNNTPSummary *cns,
(camel_folder_summary_get_folder (s)->folder_flags & CAMEL_FOLDER_FILTER_RECENT) != 0;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
camel_operation_push_message (
cancellable, _("%s: Scanning new messages"), host);
@@ -313,11 +316,14 @@ add_range_head (CamelNNTPSummary *cns,
mp = camel_mime_parser_new ();
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
camel_operation_push_message (
cancellable, _("%s: Scanning new messages"), host);
diff --git a/camel/providers/pop3/camel-pop3-folder.c b/camel/providers/pop3/camel-pop3-folder.c
index e50f3f4..a469746 100644
--- a/camel/providers/pop3/camel-pop3-folder.c
+++ b/camel/providers/pop3/camel-pop3-folder.c
@@ -164,9 +164,13 @@ cmd_list (CamelPOP3Engine *pe,
pop3_store = CAMEL_POP3_STORE (parent_store);
pop3_folder = (CamelPOP3Folder *) folder;
service = (CamelService *) parent_store;
- settings = camel_service_get_settings (service);
- batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (CAMEL_POP3_SETTINGS (settings));
+ settings = camel_service_ref_settings (service);
+
+ batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
do {
ret = camel_pop3_stream_line (stream, &line, &len, cancellable, NULL);
@@ -188,14 +192,6 @@ cmd_list (CamelPOP3Engine *pe,
if (pop3_folder->mobile_mode && pop3_folder->uids->len) {
gint y = 0;
gboolean save_uid = FALSE;
- CamelNetworkSettings *network_settings;
- const gchar *host;
-
- network_settings = CAMEL_NETWORK_SETTINGS (settings);
- host = camel_network_settings_get_host (network_settings);
-
- d(printf("*********** Mobile mode *************\n"));
- d(printf("Total Count: %s: %d\n", host, pop3_folder->uids->len));
/* Preserve the first message's ID */
fi = pop3_folder->uids->pdata[0];
@@ -502,13 +498,16 @@ pop3_folder_get_message_sync (CamelFolder *folder,
pop3_store = CAMEL_POP3_STORE (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
g_object_get (
settings,
"auto-fetch", &auto_fetch,
NULL);
+ g_object_unref (settings);
+
fi = g_hash_table_lookup (pop3_folder->uids_fi, uid);
if (fi == NULL) {
g_set_error (
@@ -758,9 +757,13 @@ pop3_fetch_messages_sync (CamelFolder *folder,
parent_store = camel_folder_get_parent_store (folder);
service = (CamelService *) parent_store;
- settings = camel_service_get_settings (service);
- batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (CAMEL_POP3_SETTINGS (settings));
+ settings = camel_service_ref_settings (service);
+
+ batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
old_len = pop3_folder->uids->len;
@@ -808,9 +811,10 @@ pop3_folder_synchronize_sync (CamelFolder *folder,
pop3_store = CAMEL_POP3_STORE (parent_store);
service = CAMEL_SERVICE (parent_store);
- settings = camel_service_get_settings (service);
is_online = camel_service_get_connection_status (service) == CAMEL_SERVICE_CONNECTED;
+ settings = camel_service_ref_settings (service);
+
g_object_get (
settings,
"delete-after-days", &delete_after_days,
@@ -818,6 +822,8 @@ pop3_folder_synchronize_sync (CamelFolder *folder,
"keep-on-server", &keep_on_server,
NULL);
+ g_object_unref (settings);
+
if (is_online && delete_after_days > 0 && !expunge) {
camel_operation_push_message (
cancellable, _("Expunging old messages"));
@@ -924,7 +930,6 @@ camel_pop3_folder_new (CamelStore *parent,
CamelPOP3Folder *pop3_folder;
service = CAMEL_SERVICE (parent);
- settings = camel_service_get_settings (service);
d(printf("opening pop3 INBOX folder\n"));
@@ -933,8 +938,13 @@ camel_pop3_folder_new (CamelStore *parent,
"full-name", "inbox", "display-name", "inbox",
"parent-store", parent, NULL);
+ settings = camel_service_ref_settings (service);
+
pop3_folder = (CamelPOP3Folder *) folder;
- pop3_folder->mobile_mode = camel_pop3_settings_get_mobile_mode (CAMEL_POP3_SETTINGS (settings));
+ pop3_folder->mobile_mode = camel_pop3_settings_get_mobile_mode (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
pop3_folder->fetch_more = 0;
if (pop3_folder->mobile_mode) {
diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c
index c764f2d..354f174 100644
--- a/camel/providers/pop3/camel-pop3-store.c
+++ b/camel/providers/pop3/camel-pop3-store.c
@@ -103,10 +103,16 @@ connect_to_server (CamelService *service,
guint32 flags = 0;
gint ret;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ method = camel_network_settings_get_security_method (network_settings);
+
+ disable_extensions = camel_pop3_settings_get_disable_extensions (
+ CAMEL_POP3_SETTINGS (settings));
+
+ g_object_unref (settings);
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
@@ -124,9 +130,6 @@ connect_to_server (CamelService *service,
goto exit;
}
- disable_extensions = camel_pop3_settings_get_disable_extensions (
- CAMEL_POP3_SETTINGS (settings));
-
if (disable_extensions)
flags |= CAMEL_POP3_ENGINE_DISABLE_EXTENSIONS;
@@ -140,8 +143,6 @@ connect_to_server (CamelService *service,
goto exit;
}
- g_object_get (settings, "security-method", &method, NULL);
-
if (method != CAMEL_NETWORK_SECURITY_METHOD_STARTTLS_ON_STANDARD_PORT) {
g_object_unref (tcp_stream);
goto exit;
@@ -236,11 +237,14 @@ try_sasl (CamelPOP3Store *store,
gint ret;
service = CAMEL_SERVICE (store);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
sasl = camel_sasl_new ("pop", mechanism, service);
if (sasl == NULL) {
g_set_error (
@@ -349,12 +353,14 @@ pop3_store_get_name (CamelService *service,
gchar *user;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("POP3 server %s"), host);
@@ -381,12 +387,15 @@ pop3_store_connect_sync (CamelService *service,
gchar *mechanism;
session = camel_service_get_session (service);
- settings = camel_service_get_settings (service);
user_data_dir = camel_service_get_user_data_dir (service);
+ settings = camel_service_ref_settings (service);
+
mechanism = camel_network_settings_dup_auth_mechanism (
CAMEL_NETWORK_SETTINGS (settings));
+ g_object_unref (settings);
+
if (!camel_session_get_online (session)) {
g_set_error (
error, CAMEL_SERVICE_ERROR,
@@ -479,12 +488,15 @@ pop3_store_authenticate_sync (CamelService *service,
gint status;
password = camel_service_get_password (service);
- settings = camel_service_get_settings (service);
+
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
user = camel_network_settings_dup_user (network_settings);
+ g_object_unref (settings);
+
if (mechanism == NULL) {
if (password == NULL) {
g_set_error_literal (
@@ -637,11 +649,13 @@ pop3_store_query_auth_types_sync (CamelService *service,
return NULL;
}
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
if (connect_to_server (service, cancellable, NULL)) {
types = g_list_concat (types, g_list_copy (store->engine->auth));
pop3_store_disconnect_sync (service, TRUE, cancellable, NULL);
diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c
index 8903681..d2e15e8 100644
--- a/camel/providers/smtp/camel-smtp-transport.c
+++ b/camel/providers/smtp/camel-smtp-transport.c
@@ -117,12 +117,14 @@ connect_to_server (CamelService *service,
transport->flags = 0;
transport->authtypes = NULL;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
method = camel_network_settings_get_security_method (network_settings);
+ g_object_unref (settings);
+
tcp_stream = camel_network_service_connect_sync (
CAMEL_NETWORK_SERVICE (service), cancellable, error);
@@ -284,11 +286,13 @@ smtp_transport_get_name (CamelService *service,
gchar *host;
gchar *name;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
+ g_object_unref (settings);
+
if (brief)
name = g_strdup_printf (
_("SMTP server %s"), host);
@@ -314,12 +318,14 @@ smtp_transport_connect_sync (CamelService *service,
gboolean auth_required;
gboolean success = TRUE;
- settings = camel_service_get_settings (service);
+ settings = camel_service_ref_settings (service);
network_settings = CAMEL_NETWORK_SETTINGS (settings);
host = camel_network_settings_dup_host (network_settings);
mechanism = camel_network_settings_dup_auth_mechanism (network_settings);
+ g_object_unref (settings);
+
/* We (probably) need to check popb4smtp before we connect ... */
if (g_strcmp0 (mechanism, "POPB4SMTP") == 0) {
GByteArray *chal;
diff --git a/docs/reference/camel/camel-sections.txt b/docs/reference/camel/camel-sections.txt
index 6cc85a6..16f62a4 100644
--- a/docs/reference/camel/camel-sections.txt
+++ b/docs/reference/camel/camel-sections.txt
@@ -2254,7 +2254,7 @@ camel_service_get_user_cache_dir
camel_service_get_name
camel_service_get_provider
camel_service_get_session
-camel_service_get_settings
+camel_service_ref_settings
camel_service_set_settings
camel_service_get_uid
camel_service_connect_sync
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]