aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog13
-rw-r--r--mail/mail-folder-cache.c82
2 files changed, 42 insertions, 53 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 3960d95909..4b722a0c90 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,16 @@
+2001-07-09 Peter Williams <peterw@ximian.com>
+
+ * mail-folder-cache.c (mail_folder_cache_set_update_shellview): Deleted
+ (as opposed to #if 0)
+ (get_folder_info): Changed to assume it has the folder lock.
+ (make_folder_name): Same.
+ (make_folder_status): Same.
+ (update_idle): Don't unlock around the make_folder_ functions.
+ (*): Changed behavior wrt. get_folder_info. Lock before calling, but
+ also move preconditions before -- get_folder_info can only return NULL
+ if uri is NULL. Also add preconditions for other arguments where
+ necessary.
+
2001-07-07 Christopher James Lahey <clahey@ximian.com>
* message-list.c (on_cursor_activated_cmd): Check for new_uid !=
diff --git a/mail/mail-folder-cache.c b/mail/mail-folder-cache.c
index d00f3c02d9..d31f5efeef 100644
--- a/mail/mail-folder-cache.c
+++ b/mail/mail-folder-cache.c
@@ -90,6 +90,7 @@ static FolderBrowser *folder_browser = NULL;
/* Private functions */
+/* call this with the folders locked */
static mail_folder_info *
get_folder_info (const gchar *uri)
{
@@ -97,8 +98,6 @@ get_folder_info (const gchar *uri)
g_return_val_if_fail (uri, NULL);
- LOCK_FOLDERS ();
-
if (folders == NULL) {
dm("Initializing");
folders = g_hash_table_new (g_str_hash, g_str_equal);
@@ -123,31 +122,28 @@ get_folder_info (const gchar *uri)
} else
dm("Hit cache for uri %s", uri);
- UNLOCK_FOLDERS ();
-
return mfi;
}
+/* call with the folders locked */
+
static gchar *
make_folder_name (mail_folder_info *mfi)
{
GString *work;
gchar *ret;
- LOCK_FOLDERS ();
-
work = g_string_new (mfi->name);
if (mfi->flags & MAIL_FIF_UNREAD_VALID && mfi->unread)
g_string_sprintfa (work, " (%d)", mfi->unread);
- UNLOCK_FOLDERS ();
-
ret = work->str;
g_string_free (work, FALSE);
return ret;
}
+/* call with the folders locked */
static gchar *
make_folder_status (mail_folder_info *mfi)
@@ -156,8 +152,6 @@ make_folder_status (mail_folder_info *mfi)
GString *work;
gchar *ret;
- LOCK_FOLDERS ();
-
/* Build the display string */
work = g_string_new ("");
@@ -180,8 +174,6 @@ make_folder_status (mail_folder_info *mfi)
g_string_sprintfa (work, _("%d total"), mfi->total);
}
- UNLOCK_FOLDERS ();
-
ret = work->str;
g_string_free (work, FALSE);
return ret;
@@ -221,10 +213,8 @@ update_idle (gpointer user_data)
/* Get the display string */
- UNLOCK_FOLDERS ();
f_name = make_folder_name (mfi);
f_status = make_folder_status (mfi);
- LOCK_FOLDERS ();
/* bold? */
@@ -554,11 +544,12 @@ mail_folder_cache_set_update_estorage (const gchar *uri, EvolutionStorage *estor
{
mail_folder_info *mfi;
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
+ g_return_if_fail (uri);
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
if (mfi->update_mode != MAIL_FIUM_UNKNOWN) {
/* we could check to see that update_mode = ESTORAGE */
/*g_warning ("folder cache: update mode already set??");*/
@@ -578,11 +569,12 @@ mail_folder_cache_set_update_lstorage (const gchar *uri, GNOME_Evolution_LocalSt
{
mail_folder_info *mfi;
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
+ g_return_if_fail (uri);
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
if (mfi->update_mode != MAIL_FIUM_UNKNOWN) {
/*we could check to see that update_mode = lstorage */
/*g_warning ("folder cache: update mode already set??");*/
@@ -601,41 +593,18 @@ mail_folder_cache_set_update_lstorage (const gchar *uri, GNOME_Evolution_LocalSt
UNLOCK_FOLDERS ();
}
-#if 0
-void
-mail_folder_cache_set_update_shellview (const gchar *uri)
-{
- mail_folder_info *mfi;
-
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
-
- LOCK_FOLDERS ();
-
- if (mfi->update_mode != MAIL_FIUM_UNKNOWN) {
- /*we could check to see that update_mode = shellview */
- /*g_warning ("folder cache: update mode already set??");*/
- UNLOCK_FOLDERS ();
- return;
- }
-
- dm ("Uri %s updates with SHELL VIEW", uri);
- mfi->update_mode = MAIL_FIUM_SHELL_VIEW;
-
- UNLOCK_FOLDERS ();
-}
-#endif
-
void
mail_folder_cache_note_folder (const gchar *uri, CamelFolder *folder)
{
mail_folder_info *mfi;
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
+ g_return_if_fail (uri);
+ g_return_if_fail (CAMEL_IS_FOLDER (folder));
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
if (mfi->flags & MAIL_FIF_FOLDER_VALID) {
if (mfi->folder != folder)
g_warning ("folder cache: CamelFolder being changed for %s??? I refuse.", uri);
@@ -665,11 +634,13 @@ mail_folder_cache_note_fb (const gchar *uri, FolderBrowser *fb)
{
mail_folder_info *mfi;
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
+ g_return_if_fail (uri);
+ g_return_if_fail (IS_FOLDER_BROWSER (fb));
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
if (!(mfi->flags & MAIL_FIF_FOLDER_VALID)) {
dm ("No folder specified so ignoring NOTE_FB at %s", uri);
UNLOCK_FOLDERS ();
@@ -695,11 +666,13 @@ mail_folder_cache_note_folderinfo (const gchar *uri, CamelFolderInfo *fi)
{
mail_folder_info *mfi;
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
+ g_return_if_fail (uri);
+ g_return_if_fail (fi);
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
dm ("Noting folderinfo %p for %s", fi, uri);
if (fi->unread_message_count != -1) {
@@ -723,11 +696,13 @@ mail_folder_cache_note_name (const gchar *uri, const gchar *name)
{
mail_folder_info *mfi;
- mfi = get_folder_info (uri);
- g_return_if_fail (mfi);
+ g_return_if_fail (uri);
+ g_return_if_fail (name);
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
dm ("Noting name %s for %s", name, uri);
if (mfi->flags & MAIL_FIF_NAME_VALID) {
@@ -751,11 +726,12 @@ mail_folder_cache_try_folder (const gchar *uri)
mail_folder_info *mfi;
CamelFolder *ret;
- mfi = get_folder_info (uri);
- g_return_val_if_fail (mfi, NULL);
+ g_return_val_if_fail (uri, NULL);
LOCK_FOLDERS ();
+ mfi = get_folder_info (uri);
+
if (mfi->flags & MAIL_FIF_FOLDER_VALID)
ret = mfi->folder;
else