Use the uid rather than vuid for unmatched. Also add the uid to unmatched
2001-11-14 <NotZed@Ximian.com> * camel-vee-folder.c (folder_changed_remove_uid): Use the uid rather than vuid for unmatched. Also add the uid to unmatched if it wasn't in the unmatched_uids table at all. (folder_changed_change): If checking for added, if the new ones dont match, then try to add them to unmatched. Fixes #6893. * camel-folder-summary.c (camel_folder_summary_index): Change lock order, always summary_lock before ref_lock. (camel_folder_summary_array): " (camel_folder_summary_uid): " (camel_folder_summary_remove_uid): " Fixes a deadlock. svn path=/trunk/; revision=14831
This commit is contained in:
@ -336,18 +336,17 @@ camel_folder_summary_index(CamelFolderSummary *s, int i)
|
||||
{
|
||||
CamelMessageInfo *info = NULL;
|
||||
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
|
||||
if (i<s->messages->len)
|
||||
info = g_ptr_array_index(s->messages, i);
|
||||
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
|
||||
if (info)
|
||||
info->refcount++;
|
||||
|
||||
CAMEL_SUMMARY_UNLOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
|
||||
return info;
|
||||
}
|
||||
@ -369,8 +368,8 @@ camel_folder_summary_array(CamelFolderSummary *s)
|
||||
GPtrArray *res = g_ptr_array_new();
|
||||
int i;
|
||||
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
|
||||
g_ptr_array_set_size(res, s->messages->len);
|
||||
for (i=0;i<s->messages->len;i++) {
|
||||
@ -378,8 +377,8 @@ camel_folder_summary_array(CamelFolderSummary *s)
|
||||
info->refcount++;
|
||||
}
|
||||
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
|
||||
return res;
|
||||
}
|
||||
@ -421,17 +420,16 @@ camel_folder_summary_uid(CamelFolderSummary *s, const char *uid)
|
||||
{
|
||||
CamelMessageInfo *info;
|
||||
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
|
||||
info = g_hash_table_lookup(s->messages_uid, uid);
|
||||
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
|
||||
if (info)
|
||||
info->refcount++;
|
||||
|
||||
CAMEL_SUMMARY_UNLOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
|
||||
return info;
|
||||
}
|
||||
@ -1062,18 +1060,18 @@ void camel_folder_summary_remove_uid(CamelFolderSummary *s, const char *uid)
|
||||
CamelMessageInfo *oldinfo;
|
||||
char *olduid;
|
||||
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_LOCK(s, ref_lock);
|
||||
if (g_hash_table_lookup_extended(s->messages_uid, uid, (void *)&olduid, (void *)&oldinfo)) {
|
||||
/* make sure it doesn't vanish while we're removing it */
|
||||
oldinfo->refcount++;
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
camel_folder_summary_remove(s, oldinfo);
|
||||
camel_folder_summary_info_free(s, oldinfo);
|
||||
} else {
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, ref_lock);
|
||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user