From: Matthew Barnes Date: Mon, 11 Feb 2013 13:07:52 +0000 (-0500) Subject: Use camel_service_ref_session(). X-Git-Tag: upstream/3.7.91~178 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4dbff3ebe13709121d270ea8def4daa502fa1206;p=platform%2Fupstream%2Fevolution-data-server.git Use camel_service_ref_session(). --- diff --git a/camel/camel-disco-diary.c b/camel/camel-disco-diary.c index 2be544c..fc14c97 100644 --- a/camel/camel-disco-diary.c +++ b/camel/camel-disco-diary.c @@ -201,7 +201,7 @@ camel_disco_diary_log (CamelDiscoDiary *diary, gchar *msg; service = CAMEL_SERVICE (diary->store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); msg = g_strdup_printf ( _("Could not write log entry: %s\n" @@ -213,6 +213,8 @@ camel_disco_diary_log (CamelDiscoDiary *diary, session, CAMEL_SESSION_ALERT_ERROR, msg, NULL, NULL); g_free (msg); + g_object_unref (session); + fclose (diary->file); diary->file = NULL; } @@ -267,17 +269,26 @@ diary_decode_folder (CamelDiscoDiary *diary, if (folder) g_hash_table_insert (diary->folders, name, folder); else { + CamelService *service; + CamelSession *session; + + service = CAMEL_SERVICE (diary->store); + session = camel_service_ref_session (service); + msg = g_strdup_printf ( _("Could not open '%s':\n%s\n" "Changes made to this folder " "will not be resynchronized."), name, error->message); - g_error_free (error); camel_session_alert_user ( - camel_service_get_session (CAMEL_SERVICE (diary->store)), + session, CAMEL_SESSION_ALERT_WARNING, msg, NULL, cancellable); g_free (msg); + + g_object_unref (session); + g_error_free (error); + g_free (name); } } else diff --git a/camel/camel-disco-folder.c b/camel/camel-disco-folder.c index ee72f8a..0caa67a 100644 --- a/camel/camel-disco-folder.c +++ b/camel/camel-disco-folder.c @@ -112,7 +112,7 @@ cdf_folder_changed (CamelFolder *folder, parent_store = camel_folder_get_parent_store (folder); service = CAMEL_SERVICE (parent_store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); sync_folder = camel_disco_folder_get_offline_sync ( CAMEL_DISCO_FOLDER (folder)); @@ -137,6 +137,8 @@ cdf_folder_changed (CamelFolder *folder, (CamelSessionCallback) cdf_sync_offline, data, (GDestroyNotify) cdf_sync_free); } + + g_object_unref (session); } static void diff --git a/camel/camel-disco-store.c b/camel/camel-disco-store.c index 60a0fd6..61c467e 100644 --- a/camel/camel-disco-store.c +++ b/camel/camel-disco-store.c @@ -68,7 +68,7 @@ disco_store_constructed (GObject *object) G_OBJECT_CLASS (camel_disco_store_parent_class)->constructed (object); service = CAMEL_SERVICE (object); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); if (camel_session_get_online (session)) disco->status = CAMEL_DISCO_STORE_ONLINE; @@ -78,6 +78,8 @@ disco_store_constructed (GObject *object) g_signal_connect ( service, "notify::connection-status", G_CALLBACK (disco_store_update_status), NULL); + + g_object_unref (session); } static gboolean @@ -283,9 +285,11 @@ disco_store_set_status (CamelDiscoStore *disco_store, store = CAMEL_STORE (disco_store); service = CAMEL_SERVICE (disco_store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); network_available = camel_session_get_network_available (session); + g_object_unref (session); + store_is_online = (disco_store->status == CAMEL_DISCO_STORE_ONLINE); going_offline = (status == CAMEL_DISCO_STORE_OFFLINE); @@ -384,12 +388,14 @@ camel_disco_store_status (CamelDiscoStore *store) CAMEL_IS_DISCO_STORE (store), CAMEL_DISCO_STORE_ONLINE); service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); if (store->status != CAMEL_DISCO_STORE_OFFLINE && !camel_session_get_online (session)) store->status = CAMEL_DISCO_STORE_OFFLINE; + g_object_unref (session); + return store->status; } @@ -480,6 +486,7 @@ camel_disco_store_prepare_for_offline (CamelDiscoStore *disco_store, CamelService *service; CamelSession *session; CamelSettings *settings; + gboolean network_available; gboolean store_is_online; gboolean sync_store; @@ -487,10 +494,13 @@ 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); + + session = camel_service_ref_session (service); + network_available = camel_session_get_network_available (session); + g_object_unref (session); /* We can't prepare for offline if we're already offline. */ - if (!camel_session_get_network_available (session)) + if (!network_available) return; /* Sync the folder fully if we've been told to diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c index 455289c..887afd4 100644 --- a/camel/camel-folder-summary.c +++ b/camel/camel-folder-summary.c @@ -2118,18 +2118,20 @@ cfs_try_release_memory (CamelFolderSummary *summary) return FALSE; } - parent_store = camel_folder_get_parent_store (summary->priv->folder); - session = camel_service_get_session (CAMEL_SERVICE (parent_store)); - if (time (NULL) - summary->priv->cache_load_time < SUMMARY_CACHE_DROP) return TRUE; + parent_store = camel_folder_get_parent_store (summary->priv->folder); + session = camel_service_ref_session (CAMEL_SERVICE (parent_store)); + camel_session_submit_job ( session, (CamelSessionCallback) remove_cache, g_object_ref (summary), (GDestroyNotify) g_object_unref); + g_object_unref (session); + return TRUE; } @@ -2301,7 +2303,7 @@ cfs_reload_from_db (CamelFolderSummary *summary, folder_name = camel_folder_get_full_name (summary->priv->folder); parent_store = camel_folder_get_parent_store (summary->priv->folder); - session = camel_service_get_session (CAMEL_SERVICE (parent_store)); + session = camel_service_ref_session (CAMEL_SERVICE (parent_store)); cdb = parent_store->cdb_r; data.columns_hash = NULL; @@ -2324,6 +2326,8 @@ cfs_reload_from_db (CamelFolderSummary *summary, g_object_ref (summary->priv->folder), (GDestroyNotify) g_object_unref); + g_object_unref (session); + return ret == 0 ? 0 : -1; } diff --git a/camel/camel-folder.c b/camel/camel-folder.c index 79ebdbc..e2470d8 100644 --- a/camel/camel-folder.c +++ b/camel/camel-folder.c @@ -1662,10 +1662,6 @@ folder_changed (CamelFolder *folder, g_return_if_fail (info != NULL); - parent_store = camel_folder_get_parent_store (folder); - session = camel_service_get_session (CAMEL_SERVICE (parent_store)); - junk_filter = camel_session_get_junk_filter (session); - camel_folder_lock (folder, CAMEL_FOLDER_CHANGE_LOCK); if (folder->priv->frozen) { camel_folder_change_info_cat (folder->priv->changed_frozen, info); @@ -1675,6 +1671,10 @@ folder_changed (CamelFolder *folder, } camel_folder_unlock (folder, CAMEL_FOLDER_CHANGE_LOCK); + parent_store = camel_folder_get_parent_store (folder); + session = camel_service_ref_session (CAMEL_SERVICE (parent_store)); + junk_filter = camel_session_get_junk_filter (session); + if (junk_filter != NULL && info->uid_changed->len) { CamelMessageFlags flags; @@ -1738,6 +1738,8 @@ folder_changed (CamelFolder *folder, g_signal_stop_emission (folder, signals[CHANGED], 0); } + + g_object_unref (session); } static void @@ -2922,7 +2924,7 @@ camel_folder_delete (CamelFolder *folder) camel_db_delete_folder (parent_store->cdb_w, full_name, NULL); service = CAMEL_SERVICE (parent_store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); signal_data = g_slice_new0 (SignalData); signal_data->folder = g_object_ref (folder); @@ -2932,6 +2934,8 @@ camel_folder_delete (CamelFolder *folder) session, G_PRIORITY_HIGH_IDLE, folder_emit_deleted_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } /** @@ -2972,7 +2976,7 @@ camel_folder_rename (CamelFolder *folder, camel_db_rename_folder (parent_store->cdb_w, old_name, new_name, NULL); service = CAMEL_SERVICE (parent_store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); signal_data = g_slice_new0 (SignalData); signal_data->folder = g_object_ref (folder); @@ -2983,6 +2987,8 @@ camel_folder_rename (CamelFolder *folder, session, G_PRIORITY_HIGH_IDLE, folder_emit_renamed_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } /** @@ -3030,7 +3036,7 @@ camel_folder_changed (CamelFolder *folder, parent_store = camel_folder_get_parent_store (folder); service = CAMEL_SERVICE (parent_store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); pending_changes = camel_folder_change_info_new (); folder->priv->pending_changes = pending_changes; @@ -3042,6 +3048,8 @@ camel_folder_changed (CamelFolder *folder, session, G_PRIORITY_LOW, folder_emit_changed_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } camel_folder_change_info_cat (pending_changes, changes); diff --git a/camel/camel-imapx-server.c b/camel/camel-imapx-server.c index 86f2b71..33d5618 100644 --- a/camel/camel-imapx-server.c +++ b/camel/camel-imapx-server.c @@ -4093,7 +4093,7 @@ imapx_reconnect (CamelIMAPXServer *is, store = camel_imapx_server_ref_store (is); service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); settings = camel_service_ref_settings (service); @@ -4200,6 +4200,7 @@ exception: exit: g_free (mechanism); + g_object_unref (session); g_object_unref (store); return success; diff --git a/camel/camel-imapx-store.c b/camel/camel-imapx-store.c index 0c7650b..ae859a3 100644 --- a/camel/camel-imapx-store.c +++ b/camel/camel-imapx-store.c @@ -1340,14 +1340,12 @@ imapx_store_get_folder_info_sync (CamelStore *store, CamelIMAPXStore *istore = (CamelIMAPXStore *) store; CamelFolderInfo * fi= NULL; CamelService *service; - CamelSession *session; CamelSettings *settings; gboolean initial_setup = FALSE; gboolean use_subscriptions; gchar *pattern; service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); settings = camel_service_ref_settings (service); @@ -1375,13 +1373,19 @@ imapx_store_get_folder_info_sync (CamelStore *store, time_t now = time (NULL); if (now - istore->last_refresh_time > FINFO_REFRESH_INTERVAL) { + CamelSession *session; + istore->last_refresh_time = time (NULL); + session = camel_service_ref_session (service); + camel_session_submit_job ( session, (CamelSessionCallback) imapx_refresh_finfo, g_object_ref (store), (GDestroyNotify) g_object_unref); + + g_object_unref (session); } fi = get_folder_info_offline (store, top, flags, error); diff --git a/camel/camel-network-service.c b/camel/camel-network-service.c index 8555d25..fbf4392 100644 --- a/camel/camel-network-service.c +++ b/camel/camel-network-service.c @@ -52,7 +52,7 @@ network_service_connect_sync (CamelNetworkService *service, gchar *host; gint status; - session = camel_service_get_session (CAMEL_SERVICE (service)); + session = camel_service_ref_session (CAMEL_SERVICE (service)); settings = camel_service_ref_settings (CAMEL_SERVICE (service)); g_return_val_if_fail (CAMEL_IS_NETWORK_SETTINGS (settings), NULL); @@ -119,6 +119,8 @@ network_service_connect_sync (CamelNetworkService *service, g_free (host); + g_object_unref (session); + return stream; } diff --git a/camel/camel-offline-folder.c b/camel/camel-offline-folder.c index 139a0ee..515311d 100644 --- a/camel/camel-offline-folder.c +++ b/camel/camel-offline-folder.c @@ -134,7 +134,7 @@ offline_folder_changed (CamelFolder *folder, parent_store = camel_folder_get_parent_store (folder); service = CAMEL_SERVICE (parent_store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); settings = camel_service_ref_settings (service); @@ -159,6 +159,8 @@ offline_folder_changed (CamelFolder *folder, offline_folder_downsync_background, data, (GDestroyNotify) offline_downsync_data_free); } + + g_object_unref (session); } static void diff --git a/camel/camel-offline-store.c b/camel/camel-offline-store.c index f54df73..b4e8050 100644 --- a/camel/camel-offline-store.c +++ b/camel/camel-offline-store.c @@ -54,8 +54,9 @@ offline_store_constructed (GObject *object) G_OBJECT_CLASS (camel_offline_store_parent_class)-> constructed (object); - session = camel_service_get_session (CAMEL_SERVICE (object)); + session = camel_service_ref_session (CAMEL_SERVICE (object)); priv->online = camel_session_get_online (session); + g_object_unref (session); } static void @@ -124,7 +125,7 @@ camel_offline_store_set_online_sync (CamelOfflineStore *store, return TRUE; service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); network_available = camel_session_get_network_available (session); store_is_online = camel_offline_store_get_online (store); @@ -136,6 +137,8 @@ camel_offline_store_set_online_sync (CamelOfflineStore *store, g_object_unref (settings); + g_object_unref (session); + /* Returning to online mode is the simpler case. */ if (!store_is_online) { store->priv->online = online; @@ -203,7 +206,7 @@ camel_offline_store_prepare_for_offline_sync (CamelOfflineStore *store, g_return_val_if_fail (CAMEL_IS_OFFLINE_STORE (store), FALSE); service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); network_available = camel_session_get_network_available (session); store_is_online = camel_offline_store_get_online (store); @@ -215,6 +218,8 @@ camel_offline_store_prepare_for_offline_sync (CamelOfflineStore *store, g_object_unref (settings); + g_object_unref (session); + if (network_available && store_is_online) { GPtrArray *folders; guint ii; diff --git a/camel/camel-sasl-popb4smtp.c b/camel/camel-sasl-popb4smtp.c index fcb59fb..5b3c4a5 100644 --- a/camel/camel-sasl-popb4smtp.c +++ b/camel/camel-sasl-popb4smtp.c @@ -76,7 +76,7 @@ sasl_popb4smtp_challenge_sync (CamelSasl *sasl, gchar *pop_uid; service = camel_sasl_get_service (sasl); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); camel_sasl_set_authenticated (sasl, FALSE); @@ -89,6 +89,8 @@ sasl_popb4smtp_challenge_sync (CamelSasl *sasl, else service = NULL; + g_object_unref (session); + if (service == NULL) { g_set_error ( error, CAMEL_SERVICE_ERROR, diff --git a/camel/camel-service.c b/camel/camel-service.c index 845a06d..b63ba9f 100644 --- a/camel/camel-service.c +++ b/camel/camel-service.c @@ -322,7 +322,6 @@ service_find_old_data_dir (CamelService *service) gchar *old_data_dir; provider = camel_service_get_provider (service); - session = camel_service_get_session (service); url = camel_service_new_camel_url (service); allows_host = CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_HOST); @@ -376,9 +375,13 @@ service_find_old_data_dir (CamelService *service) g_string_append (path, url->path); } + session = camel_service_ref_session (service); + base_dir = camel_session_get_user_data_dir (session); old_data_dir = g_build_filename (base_dir, path->str, NULL); + g_object_unref (session); + g_string_free (path, TRUE); if (!g_file_test (old_data_dir, G_FILE_TEST_IS_DIR)) { @@ -406,7 +409,7 @@ service_queue_notify_connection_status (CamelService *service) { CamelSession *session; - session = camel_service_get_session (service); + session = camel_service_ref_session (service); /* Prioritize ahead of GTK+ redraws. */ camel_session_idle_add ( @@ -414,6 +417,8 @@ service_queue_notify_connection_status (CamelService *service) service_notify_connection_status_cb, g_object_ref (service), (GDestroyNotify) g_object_unref); + + g_object_unref (session); } static void @@ -610,8 +615,8 @@ service_get_property (GObject *object, return; case PROP_SESSION: - g_value_set_object ( - value, camel_service_get_session ( + g_value_take_object ( + value, camel_service_ref_session ( CAMEL_SERVICE (object))); return; @@ -688,7 +693,7 @@ service_constructed (GObject *object) G_OBJECT_CLASS (camel_service_parent_class)->constructed (object); service = CAMEL_SERVICE (object); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); uid = camel_service_get_uid (service); @@ -697,6 +702,8 @@ service_constructed (GObject *object) base_dir = camel_session_get_user_cache_dir (session); service->priv->user_cache_dir = g_build_filename (base_dir, uid, NULL); + + g_object_unref (session); } static gchar * diff --git a/camel/camel-session.c b/camel/camel-session.c index 975d707..e335814 100644 --- a/camel/camel-session.c +++ b/camel/camel-session.c @@ -992,9 +992,6 @@ camel_session_remove_service (CamelSession *session, g_return_if_fail (CAMEL_IS_SESSION (session)); g_return_if_fail (CAMEL_IS_SERVICE (service)); - /* Verify the service belongs to this session. */ - g_return_if_fail (camel_service_get_session (service) == session); - class = CAMEL_SESSION_GET_CLASS (session); g_return_if_fail (class->remove_service != NULL); diff --git a/camel/camel-store.c b/camel/camel-store.c index dab6b17..f9c96d9 100644 --- a/camel/camel-store.c +++ b/camel/camel-store.c @@ -1273,7 +1273,7 @@ camel_store_folder_created (CamelStore *store, g_return_if_fail (CAMEL_IS_STORE (store)); g_return_if_fail (folder_info != NULL); - session = camel_service_get_session (CAMEL_SERVICE (store)); + session = camel_service_ref_session (CAMEL_SERVICE (store)); signal_data = g_slice_new0 (SignalData); signal_data->store = g_object_ref (store); @@ -1284,6 +1284,8 @@ camel_store_folder_created (CamelStore *store, session, G_PRIORITY_HIGH_IDLE, store_emit_folder_created_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } /** @@ -1308,7 +1310,7 @@ camel_store_folder_deleted (CamelStore *store, g_return_if_fail (CAMEL_IS_STORE (store)); g_return_if_fail (folder_info != NULL); - session = camel_service_get_session (CAMEL_SERVICE (store)); + session = camel_service_ref_session (CAMEL_SERVICE (store)); signal_data = g_slice_new0 (SignalData); signal_data->store = g_object_ref (store); @@ -1319,6 +1321,8 @@ camel_store_folder_deleted (CamelStore *store, session, G_PRIORITY_HIGH_IDLE, store_emit_folder_deleted_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } /** @@ -1343,7 +1347,7 @@ camel_store_folder_opened (CamelStore *store, g_return_if_fail (CAMEL_IS_STORE (store)); g_return_if_fail (CAMEL_IS_FOLDER (folder)); - session = camel_service_get_session (CAMEL_SERVICE (store)); + session = camel_service_ref_session (CAMEL_SERVICE (store)); signal_data = g_slice_new0 (SignalData); signal_data->store = g_object_ref (store); @@ -1354,6 +1358,8 @@ camel_store_folder_opened (CamelStore *store, session, G_PRIORITY_HIGH_IDLE, store_emit_folder_opened_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } /** @@ -1381,7 +1387,7 @@ camel_store_folder_renamed (CamelStore *store, g_return_if_fail (old_name != NULL); g_return_if_fail (folder_info != NULL); - session = camel_service_get_session (CAMEL_SERVICE (store)); + session = camel_service_ref_session (CAMEL_SERVICE (store)); signal_data = g_slice_new0 (SignalData); signal_data->store = g_object_ref (store); @@ -1393,6 +1399,8 @@ camel_store_folder_renamed (CamelStore *store, session, G_PRIORITY_HIGH_IDLE, store_emit_folder_renamed_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } static void diff --git a/camel/camel-subscribable.c b/camel/camel-subscribable.c index ef14132..331103e 100644 --- a/camel/camel-subscribable.c +++ b/camel/camel-subscribable.c @@ -629,7 +629,7 @@ camel_subscribable_folder_subscribed (CamelSubscribable *subscribable, g_return_if_fail (folder_info != NULL); service = CAMEL_SERVICE (subscribable); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); signal_data = g_slice_new0 (SignalData); signal_data->subscribable = g_object_ref (subscribable); @@ -640,6 +640,8 @@ camel_subscribable_folder_subscribed (CamelSubscribable *subscribable, session, G_PRIORITY_HIGH_IDLE, subscribable_emit_folder_subscribed_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } /** @@ -666,7 +668,7 @@ camel_subscribable_folder_unsubscribed (CamelSubscribable *subscribable, g_return_if_fail (folder_info != NULL); service = CAMEL_SERVICE (subscribable); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); signal_data = g_slice_new0 (SignalData); signal_data->subscribable = g_object_ref (subscribable); @@ -677,5 +679,7 @@ camel_subscribable_folder_unsubscribed (CamelSubscribable *subscribable, session, G_PRIORITY_HIGH_IDLE, subscribable_emit_folder_unsubscribed_cb, signal_data, (GDestroyNotify) signal_data_free); + + g_object_unref (session); } diff --git a/camel/camel-vee-folder.c b/camel/camel-vee-folder.c index 9e77460..1e870d5 100644 --- a/camel/camel-vee-folder.c +++ b/camel/camel-vee-folder.c @@ -1105,7 +1105,7 @@ vee_folder_folder_changed (CamelVeeFolder *vee_folder, folder = CAMEL_FOLDER (vee_folder); parent_store = camel_folder_get_parent_store (folder); - session = camel_service_get_session (CAMEL_SERVICE (parent_store)); + session = camel_service_ref_session (CAMEL_SERVICE (parent_store)); g_async_queue_lock (vee_folder->priv->change_queue); @@ -1123,6 +1123,8 @@ vee_folder_folder_changed (CamelVeeFolder *vee_folder, } g_async_queue_unlock (vee_folder->priv->change_queue); + + g_object_unref (session); } static void diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c index 5cd8a63..8250f69 100644 --- a/camel/camel-vee-store.c +++ b/camel/camel-vee-store.c @@ -1013,15 +1013,19 @@ camel_vee_store_rebuild_unmatched_folder (CamelVeeStore *vstore, /* this operation requires cancellable, thus if called * without it then run in a dedicated thread */ if (!cancellable) { + CamelService *service; CamelSession *session; - session = camel_service_get_session (CAMEL_SERVICE (vstore)); + service = CAMEL_SERVICE (vstore); + session = camel_service_ref_session (service); camel_session_submit_job ( session, (CamelSessionCallback) vee_store_rebuild_unmatched_folder, g_object_ref (vstore), g_object_unref); + + g_object_unref (session); } else { vee_store_rebuild_unmatched_folder (NULL, cancellable, vstore, error); } diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c index 3b01b03..af02279 100644 --- a/camel/providers/nntp/camel-nntp-store.c +++ b/camel/providers/nntp/camel-nntp-store.c @@ -258,7 +258,7 @@ connect_to_server (CamelService *service, guint len; gchar *host, *path, *user, *mechanism; - session = camel_service_get_session (service); + session = camel_service_ref_session (service); user_cache_dir = camel_service_get_user_cache_dir (service); settings = camel_service_ref_settings (service); @@ -345,6 +345,8 @@ fail: g_free (user); g_free (mechanism); + g_object_unref (session); + return retval; } @@ -1677,7 +1679,7 @@ camel_nntp_raw_command_auth (CamelNNTPStore *store, va_list ap; service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); + session = camel_service_ref_session (service); retry = 0; @@ -1690,13 +1692,15 @@ camel_nntp_raw_command_auth (CamelNNTPStore *store, va_end (ap); if (ret == NNTP_AUTH_REQUIRED) { - if (!camel_session_authenticate_sync ( - session, service, NULL, cancellable, error)) - return -1; - go = TRUE; + go = camel_session_authenticate_sync ( + session, service, NULL, cancellable, error); + if (!go) + ret = -1; } } while (retry < 3 && go); + g_object_unref (session); + return ret; } @@ -1711,6 +1715,7 @@ camel_nntp_command (CamelNNTPStore *store, { CamelService *service; CamelSession *session; + gboolean success; const gchar *full_name = NULL; const guchar *p; va_list ap; @@ -1719,7 +1724,6 @@ camel_nntp_command (CamelNNTPStore *store, GError *local_error = NULL; service = CAMEL_SERVICE (store); - session = camel_service_get_session (service); if (((CamelDiscoStore *) store)->status == CAMEL_DISCO_STORE_OFFLINE) { g_set_error ( @@ -1773,8 +1777,12 @@ camel_nntp_command (CamelNNTPStore *store, error: switch (ret) { case NNTP_AUTH_REQUIRED: - if (!camel_session_authenticate_sync ( - session, service, NULL, cancellable, error)) + session = camel_service_ref_session (service); + success = camel_session_authenticate_sync ( + session, service, NULL, cancellable, error); + g_object_unref (session); + + if (!success) return -1; retry--; ret = -1; diff --git a/camel/providers/pop3/camel-pop3-store.c b/camel/providers/pop3/camel-pop3-store.c index 866b79b..25eaca0 100644 --- a/camel/providers/pop3/camel-pop3-store.c +++ b/camel/providers/pop3/camel-pop3-store.c @@ -407,7 +407,7 @@ pop3_store_connect_sync (CamelService *service, gboolean success = TRUE; gchar *mechanism; - session = camel_service_get_session (service); + session = camel_service_ref_session (service); user_data_dir = camel_service_get_user_data_dir (service); settings = camel_service_ref_settings (service); @@ -459,6 +459,8 @@ pop3_store_connect_sync (CamelService *service, exit: g_free (mechanism); + g_object_unref (session); + return success; } diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c index a107525..f5f7e4c 100644 --- a/camel/providers/smtp/camel-smtp-transport.c +++ b/camel/providers/smtp/camel-smtp-transport.c @@ -365,7 +365,7 @@ smtp_transport_connect_sync (CamelService *service, if (auth_required) { CamelSession *session; - session = camel_service_get_session (service); + session = camel_service_ref_session (service); if (g_hash_table_lookup (transport->authtypes, mechanism)) { success = camel_session_authenticate_sync ( @@ -380,6 +380,8 @@ smtp_transport_connect_sync (CamelService *service, success = FALSE; } + g_object_unref (session); + if (!success) camel_service_disconnect_sync ( service, TRUE, cancellable, NULL);