diff options
-rw-r--r-- | src/camel/camel-folder.c | 44 | ||||
-rw-r--r-- | src/camel/camel-vee-folder.c | 4 |
2 files changed, 43 insertions, 5 deletions
diff --git a/src/camel/camel-folder.c b/src/camel/camel-folder.c index abece0c9f..c017bc365 100644 --- a/src/camel/camel-folder.c +++ b/src/camel/camel-folder.c @@ -285,25 +285,41 @@ folder_filter (CamelSession *session, /* Reset junk learn flag so that we don't process it again */ if (data->junk) { + CamelFolderSummary *summary; + + summary = camel_folder_get_folder_summary (data->folder); + + camel_folder_summary_lock (summary); + for (i = 0; i < data->junk->len; i++) { - info = camel_folder_summary_get (camel_folder_get_folder_summary (data->folder), data->junk->pdata[i]); + info = camel_folder_summary_get (summary, data->junk->pdata[i]); if (!info) continue; camel_message_info_set_flags (info, CAMEL_MESSAGE_JUNK_LEARN, 0); g_clear_object (&info); } + + camel_folder_summary_unlock (summary); } if (data->notjunk) { + CamelFolderSummary *summary; + + summary = camel_folder_get_folder_summary (data->folder); + + camel_folder_summary_lock (summary); + for (i = 0; i < data->notjunk->len; i++) { - info = camel_folder_summary_get (camel_folder_get_folder_summary (data->folder), data->notjunk->pdata[i]); + info = camel_folder_summary_get (summary, data->notjunk->pdata[i]); if (!info) continue; camel_message_info_set_flags (info, CAMEL_MESSAGE_JUNK_LEARN, 0); g_clear_object (&info); } + + camel_folder_summary_unlock (summary); } if (data->junk) { @@ -749,13 +765,19 @@ folder_set_message_flags (CamelFolder *folder, g_return_val_if_fail (folder->priv->summary != NULL, FALSE); + camel_folder_summary_lock (folder->priv->summary); + info = camel_folder_summary_get (folder->priv->summary, uid); - if (info == NULL) + if (info == NULL) { + camel_folder_summary_unlock (folder->priv->summary); return FALSE; + } res = camel_message_info_set_flags (info, mask, set); g_clear_object (&info); + camel_folder_summary_unlock (folder->priv->summary); + return res; } @@ -789,12 +811,18 @@ folder_set_message_user_flag (CamelFolder *folder, g_return_if_fail (folder->priv->summary != NULL); + camel_folder_summary_lock (folder->priv->summary); + info = camel_folder_summary_get (folder->priv->summary, uid); - if (info == NULL) + if (info == NULL) { + camel_folder_summary_unlock (folder->priv->summary); return; + } camel_message_info_set_user_flag (info, name, value); g_clear_object (&info); + + camel_folder_summary_unlock (folder->priv->summary); } static const gchar * @@ -827,12 +855,18 @@ folder_set_message_user_tag (CamelFolder *folder, g_return_if_fail (folder->priv->summary != NULL); + camel_folder_summary_lock (folder->priv->summary); + info = camel_folder_summary_get (folder->priv->summary, uid); - if (info == NULL) + if (info == NULL) { + camel_folder_summary_unlock (folder->priv->summary); return; + } camel_message_info_set_user_tag (info, name, value); g_clear_object (&info); + + camel_folder_summary_unlock (folder->priv->summary); } static GPtrArray * diff --git a/src/camel/camel-vee-folder.c b/src/camel/camel-vee-folder.c index aae394c7c..383e92385 100644 --- a/src/camel/camel-vee-folder.c +++ b/src/camel/camel-vee-folder.c @@ -139,6 +139,8 @@ vee_folder_note_added_uid (CamelVeeFolder *vfolder, { const gchar *vuid; + camel_folder_summary_lock (CAMEL_FOLDER_SUMMARY (vsummary)); + vuid = camel_vee_message_info_data_get_vee_message_uid (added_mi_data); if (!camel_folder_summary_check_uid (CAMEL_FOLDER_SUMMARY (vsummary), vuid)) { /* add it only if it wasn't in yet */ @@ -158,6 +160,8 @@ vee_folder_note_added_uid (CamelVeeFolder *vfolder, if (included_as_changed && changes) camel_folder_change_info_change_uid (changes, vuid); } + + camel_folder_summary_unlock (CAMEL_FOLDER_SUMMARY (vsummary)); } static void |