aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-disco-store.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2004-03-19 13:44:26 +0800
committerMichael Zucci <zucchi@src.gnome.org>2004-03-19 13:44:26 +0800
commit067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6 (patch)
treea95377a2aff1d4b20404e8f466f7d56b364b4210 /camel/camel-disco-store.c
parent3907796ac1481040b67d84a7830054522111d56e (diff)
downloadgsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.tar
gsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.tar.gz
gsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.tar.bz2
gsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.tar.lz
gsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.tar.xz
gsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.tar.zst
gsoc2013-evolution-067979285b49a2cd3f0b878a3a6f8bf52fdbf2b6.zip
ref the diary before replaying it. it could get unreffed during replay if
2004-03-19 Not Zed <NotZed@Ximian.com> * camel-disco-store.c (disco_connect): ref the diary before replaying it. it could get unreffed during replay if there's an error and we disconnect. * camel-store.c (camel_store_get_folder): no longer use folder_lock, we already have adequate serialisation code here or below here. I hope. (camel_store_get_folder_info): same here. svn path=/trunk/; revision=25126
Diffstat (limited to 'camel/camel-disco-store.c')
-rw-r--r--camel/camel-disco-store.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/camel/camel-disco-store.c b/camel/camel-disco-store.c
index 02ac74cd3f..f674eb797c 100644
--- a/camel/camel-disco-store.c
+++ b/camel/camel-disco-store.c
@@ -140,6 +140,7 @@ disco_connect (CamelService *service, CamelException *ex)
{
CamelDiscoStore *store = CAMEL_DISCO_STORE (service);
CamelDiscoStoreStatus status;
+ struct _CamelDiscoDiary *diary;
status = camel_disco_store_status (store);
if (status != CAMEL_DISCO_STORE_OFFLINE) {
@@ -160,9 +161,13 @@ disco_connect (CamelService *service, CamelException *ex)
if (camel_disco_diary_empty (store->diary))
return TRUE;
- /* Need to resync */
+ /* Need to resync. Note we do the ref thing since during the replay
+ disconnect could be called, which will remove store->diary and unref it */
store->status = CAMEL_DISCO_STORE_RESYNCING;
- camel_disco_diary_replay (store->diary, ex);
+ diary = store->diary;
+ camel_object_ref(diary);
+ camel_disco_diary_replay(diary, ex);
+ camel_object_unref(diary);
store->status = CAMEL_DISCO_STORE_ONLINE;
if (camel_exception_is_set (ex))
return FALSE;