From 1c35d94851adfab4340464376118eea4d964fc8d Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 25 Mar 2013 14:16:36 +0100 Subject: Bug #687412 - Crash under mail_folder_cache_service_removed() --- libemail-engine/mail-folder-cache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'libemail-engine') diff --git a/libemail-engine/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c index 2f99e84c57..2bf0bb470c 100644 --- a/libemail-engine/mail-folder-cache.c +++ b/libemail-engine/mail-folder-cache.c @@ -841,13 +841,13 @@ update_folders (CamelStore *store, g_rec_mutex_lock (&ud->cache->priv->stores_mutex); si = g_hash_table_lookup (ud->cache->priv->stores, store); - if (si && !g_cancellable_is_cancelled (ud->cancellable)) { + if (si) { /* The 'si' is still there, so we can remove ourselves from * its list. Or else its not, and we're on our own and free * anyway. */ g_queue_remove (&si->folderinfo_updates, ud); - if (fi != NULL) + if (fi != NULL && !g_cancellable_is_cancelled (ud->cancellable)) create_folders (ud->cache, fi, si); } g_rec_mutex_unlock (&ud->cache->priv->stores_mutex); @@ -998,6 +998,12 @@ store_go_online_cb (CamelStore *store, G_PRIORITY_DEFAULT, ud->cancellable, (GAsyncReadyCallback) update_folders, ud); } else { + StoreInfo *si; + + si = g_hash_table_lookup (ud->cache->priv->stores, store); + if (si) + g_queue_remove (&si->folderinfo_updates, ud); + /* The store vanished, that means we were probably cancelled, * or at any rate, need to clean ourselves up. */ if (ud->cancellable != NULL) -- cgit v1.2.3