From 54610a0e8f44ebf17691887661cc54b78b379702 Mon Sep 17 00:00:00 2001 From: alexander chumakov Date: Mon, 1 Mar 2010 16:05:00 +0300 Subject: [PATCH 1/1] Fixed crash while handling email home applet request Fixed bug #157602 --- src/dbus_api/modest-dbus-callbacks.c | 69 +++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/src/dbus_api/modest-dbus-callbacks.c b/src/dbus_api/modest-dbus-callbacks.c index d9a184a..987adbf 100644 --- a/src/dbus_api/modest-dbus-callbacks.c +++ b/src/dbus_api/modest-dbus-callbacks.c @@ -2270,38 +2270,47 @@ get_unread_messages_get_account (GetUnreadMessagesHelper *helper) /* Search through all accounts */ iterator = tny_list_create_iterator (helper->accounts_list); - if (tny_iterator_is_done (iterator)) { - /* all results, then finish */ - return_results (helper); - } else { - TnyAccount *account; - TnyList *folders_list; - ModestProtocolType protocol_type; - - account = TNY_ACCOUNT (tny_iterator_get_current (iterator)); - protocol_type = modest_tny_account_get_protocol_type (account); - - folders_list = tny_simple_list_new (); - helper->inboxes_list = tny_simple_list_new (); - if (MODEST_PROTOCOL_REGISTRY_TYPE_INVALID != protocol_type && - modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (), - protocol_type, MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS)) { - /* For multi-mailbox protocols we only can get the number of unread messages, - we will not even try to get their email headers */ - helper->folder_requests_done = 0; - helper->folder_requests_total = 1; - tny_folder_store_get_folders_async (TNY_FOLDER_STORE (account), - folders_list, NULL, FALSE, get_multi_mailbox_account_folders_cb, NULL, helper); - } - else { - /* For non-multi-mailbox protocols we will get their email headers */ - tny_folder_store_get_folders_async (TNY_FOLDER_STORE (account), - folders_list, NULL, FALSE, get_account_folders_cb, NULL, helper); + do { + if (tny_iterator_is_done (iterator)) { + /* all results, then finish */ + return_results (helper); + break; + } else { + TnyAccount *account; + + account = TNY_ACCOUNT (tny_iterator_get_current (iterator)); + if (account && TNY_FOLDER_STORE (account) && TNY_IS_FOLDER_STORE (TNY_FOLDER_STORE (account))) { + TnyList *folders_list; + ModestProtocolType protocol_type; + + protocol_type = modest_tny_account_get_protocol_type (account); + + folders_list = tny_simple_list_new (); + helper->inboxes_list = tny_simple_list_new (); + if (MODEST_PROTOCOL_REGISTRY_TYPE_INVALID != protocol_type && + modest_protocol_registry_protocol_type_has_tag (modest_runtime_get_protocol_registry (), + protocol_type, MODEST_PROTOCOL_REGISTRY_MULTI_MAILBOX_PROVIDER_PROTOCOLS)) { + /* For multi-mailbox protocols we only can get the number of unread messages, + we will not even try to get their email headers */ + helper->folder_requests_done = 0; + helper->folder_requests_total = 1; + tny_folder_store_get_folders_async (TNY_FOLDER_STORE (account), + folders_list, NULL, FALSE, get_multi_mailbox_account_folders_cb, NULL, helper); + } + else { + /* For non-multi-mailbox protocols we will get their email headers */ + tny_folder_store_get_folders_async (TNY_FOLDER_STORE (account), + folders_list, NULL, FALSE, get_account_folders_cb, NULL, helper); + } + g_object_unref (folders_list); + g_object_unref (account); + break; + } } - g_object_unref (folders_list); - g_object_unref (account); - } + /* incorrect item detected, move on to the next item */ + tny_iterator_next (iterator); + } while (TRUE); g_object_unref (iterator); } -- 1.7.9.5