Change the order of execution slightly. We delete the folder first, then
author4 <NotZed@Ximian.com>
Fri, 5 Oct 2001 18:08:22 +0000 (18:08 +0000)
committerMichael Zucci <zucchi@src.gnome.org>
Fri, 5 Oct 2001 18:08:22 +0000 (18:08 +0000)
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 :-/

camel/ChangeLog
camel/camel-store.c
camel/camel-vee-store.c

index 8ec5a4f..db705d2 100644 (file)
@@ -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
index 96c6a0c..792dd6c 100644 (file)
@@ -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);
 }
 
index a5e2a43..4530c34 100644 (file)
@@ -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));