diff options
-rw-r--r-- | camel/ChangeLog | 15 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-folder.c | 11 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 11 |
3 files changed, 35 insertions, 2 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index bff4dc09bc..2dcdb99614 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,5 +1,20 @@ 2002-06-19 Jeffrey Stedfast <fejj@ximian.com> + * providers/imap/camel-imap-folder.c (imap_refresh_info): Make + sure we hold the command_lock before accessing current_folder. + (imap_append_online): Same. + (imap_transfer_online): Same. + + * providers/imap/camel-imap-store.c (delete_folder): We need to + hold the command_lock before we can set the current_folder to + NULL. + (rename_folder): Same. + (get_folder_info_online): We need to make sure we hold the + command_lock in order to use current_folder. + (everywhere): Same. + +2002-06-19 Jeffrey Stedfast <fejj@ximian.com> + * providers/smtp/camel-smtp-transport.c (smtp_connect): Don't bother trying to authenticate (and thus don't throw up an error dialog) unless the server is an ESMTP server and supports diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c index 813a82ee89..6895a6bf0b 100644 --- a/camel/providers/imap/camel-imap-folder.c +++ b/camel/providers/imap/camel-imap-folder.c @@ -471,12 +471,15 @@ imap_refresh_info (CamelFolder *folder, CamelException *ex) /* If the folder isn't selected, select it (which will force * a rescan if one is needed. */ + CAMEL_IMAP_STORE_LOCK (imap_store, command_lock); if (imap_store->current_folder != folder) { + CAMEL_IMAP_STORE_UNLOCK (imap_store, command_lock); response = camel_imap_command (imap_store, folder, ex, NULL); camel_imap_response_free (imap_store, response); return; } - + CAMEL_IMAP_STORE_UNLOCK (imap_store, command_lock); + /* Otherwise, if we need a rescan, do it, and if not, just do * a NOOP to give the server a chance to tell us about new * messages. @@ -1156,9 +1159,11 @@ imap_append_online (CamelFolder *folder, CamelMimeMessage *message, camel_imap_response_free (store, response); /* Make sure a "folder_changed" is emitted. */ + CAMEL_IMAP_STORE_LOCK (store, command_lock); if (store->current_folder != folder || camel_folder_summary_count (folder->summary) == count) imap_refresh_info (folder, ex); + CAMEL_IMAP_STORE_UNLOCK (store, command_lock); } static void @@ -1360,10 +1365,12 @@ imap_transfer_online (CamelFolder *source, GPtrArray *uids, return; /* Make the destination notice its new messages */ + CAMEL_IMAP_STORE_LOCK (store, command_lock); if (store->current_folder != dest || camel_folder_summary_count (dest->summary) == count) camel_folder_refresh_info (dest, ex); - + CAMEL_IMAP_STORE_UNLOCK (store, command_lock); + if (delete_originals) { for (i = 0; i < uids->len; i++) camel_folder_delete_message (source, uids->pdata[i]); diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index 1e6284b572..f899168595 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -1409,10 +1409,14 @@ delete_folder (CamelStore *store, const char *folder_name, CamelException *ex) if (response) { camel_imap_response_free_without_processing (imap_store, response); + CAMEL_IMAP_STORE_LOCK (imap_store, command_lock); + if (imap_store->current_folder) camel_object_unref (CAMEL_OBJECT (imap_store->current_folder)); /* no need to actually create a CamelFolder for INBOX */ imap_store->current_folder = NULL; + + CAMEL_IMAP_STORE_UNLOCK (imap_store, command_lock); } else return; @@ -1544,10 +1548,14 @@ rename_folder (CamelStore *store, const char *old_name, const char *new_name, Ca if (response) { camel_imap_response_free_without_processing (imap_store, response); + CAMEL_IMAP_STORE_LOCK (imap_store, command_lock); + if (imap_store->current_folder) camel_object_unref (CAMEL_OBJECT (imap_store->current_folder)); /* no need to actually create a CamelFolder for INBOX */ imap_store->current_folder = NULL; + + CAMEL_IMAP_STORE_UNLOCK (imap_store, command_lock); } else return; @@ -1993,6 +2001,7 @@ get_folder_info_online (CamelStore *store, const char *top, continue; } + CAMEL_IMAP_STORE_LOCK (imap_store, command_lock); /* For the current folder, poke it to check for new * messages and then report that number, rather than * doing a STATUS command. @@ -2003,6 +2012,8 @@ get_folder_info_online (CamelStore *store, const char *top, fi->unread_message_count = camel_folder_get_unread_message_count (imap_store->current_folder); } else fi->unread_message_count = get_folder_status (imap_store, fi->full_name, "UNSEEN"); + + CAMEL_IMAP_STORE_UNLOCK (imap_store, command_lock); } g_ptr_array_free (folders, TRUE); |