diff options
Diffstat (limited to 'camel/providers/imap/camel-imap-message-cache.c')
-rw-r--r-- | camel/providers/imap/camel-imap-message-cache.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/camel/providers/imap/camel-imap-message-cache.c b/camel/providers/imap/camel-imap-message-cache.c index 2f811eea47..d4f569423c 100644 --- a/camel/providers/imap/camel-imap-message-cache.c +++ b/camel/providers/imap/camel-imap-message-cache.c @@ -421,12 +421,11 @@ camel_imap_message_cache_remove (CamelImapMessageCache *cache, const char *uid) g_ptr_array_free (subparts, TRUE); } -static gboolean -clear_part (gpointer key, gpointer value, gpointer data) +static void +add_uids (gpointer key, gpointer value, gpointer data) { if (!strchr (key, '.')) - camel_imap_message_cache_remove (data, key); - return TRUE; + g_ptr_array_add (data, key); } /** @@ -438,7 +437,15 @@ clear_part (gpointer key, gpointer value, gpointer data) void camel_imap_message_cache_clear (CamelImapMessageCache *cache) { - g_hash_table_foreach_remove (cache->parts, clear_part, cache); + GPtrArray *uids; + int i; + + uids = g_ptr_array_new (); + g_hash_table_foreach (cache->parts, add_uids, uids); + + for (i = 0; i < uids->len; i++) + camel_imap_message_cache_remove (cache, uids->pdata[i]); + g_ptr_array_free (uids, TRUE); } |