aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camel/ChangeLog8
-rw-r--r--camel/camel-store.c33
-rw-r--r--camel/camel-vee-store.c1
3 files changed, 28 insertions, 14 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 8ec5a4f3b7..db705d2b8e 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,11 @@
+2001-10-04 <NotZed@Ximian.com>
+
+ * camel-store.c (camel_store_delete_folder): Change the order of
+ execution slightly. We delete the folder first, then call the
+ classes delete folder, then cleanup the hashtable afterwards.
+ This is so deletes of vfolders work, since vee-store uses the
+ folder hashtable to store all of is vfolders :-/
+
2001-10-04 Jeffrey Stedfast <fejj@ximian.com>
* camel-service.c (camel_service_connect): Unregister the
diff --git a/camel/camel-store.c b/camel/camel-store.c
index 96c6a0c8bc..792dd6c6f9 100644
--- a/camel/camel-store.c
+++ b/camel/camel-store.c
@@ -320,32 +320,39 @@ void
camel_store_delete_folder (CamelStore *store, const char *folder_name, CamelException *ex)
{
CamelFolder *folder = NULL;
+ char *key;
CAMEL_STORE_LOCK(store, folder_lock);
/* if we deleted a folder, force it out of the cache, and also out of the vtrash if setup */
if (store->folders) {
- char *key;
-
+ CAMEL_STORE_LOCK(store, cache_lock);
+ folder = g_hash_table_lookup(store->folders, folder_name);
+ if (folder)
+ camel_object_ref((CamelObject *)folder);
+ CAMEL_STORE_UNLOCK(store, cache_lock);
+
+ if (folder) {
+ if (store->vtrash)
+ camel_vee_folder_remove_folder((CamelVeeFolder *)store->vtrash, folder);
+ camel_folder_delete (folder);
+ }
+ }
+
+ CS_CLASS (store)->delete_folder (store, folder_name, ex);
+
+ if (folder)
+ camel_object_unref((CamelObject *)folder);
+
+ if (store->folders) {
CAMEL_STORE_LOCK(store, cache_lock);
if (g_hash_table_lookup_extended(store->folders, folder_name, (void **)&key, (void **)&folder)) {
g_hash_table_remove (store->folders, key);
g_free (key);
- camel_object_ref (CAMEL_OBJECT (folder));
}
-
CAMEL_STORE_UNLOCK(store, cache_lock);
}
- if (folder) {
- if (store->vtrash)
- camel_vee_folder_remove_folder((CamelVeeFolder *)store->vtrash, folder);
- camel_folder_delete (folder);
- camel_object_unref (CAMEL_OBJECT (folder));
- }
-
- CS_CLASS (store)->delete_folder (store, folder_name, ex);
-
CAMEL_STORE_UNLOCK(store, folder_lock);
}
diff --git a/camel/camel-vee-store.c b/camel/camel-vee-store.c
index a5e2a43070..4530c34ee2 100644
--- a/camel/camel-vee-store.c
+++ b/camel/camel-vee-store.c
@@ -261,7 +261,6 @@ vee_delete_folder(CamelStore *store, const char *folder_name, CamelException *ex
if (store->vtrash)
camel_vee_folder_remove_folder((CamelVeeFolder *)store->vtrash, folder);
- /* FIXME: deleted event shoudl just pass out the folder name, not all this shit?? */
if (update) {
CamelFolderInfo *fi = g_malloc0(sizeof(*fi));